BIND 10 master, updated. 95cb383de7f191fdd4e8796ef52b469be90e5523 Merge branch 'trac2992'
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jun 13 05:30:22 UTC 2013
The branch, master has been updated
via 95cb383de7f191fdd4e8796ef52b469be90e5523 (commit)
via b2f0388d5396ee32c6e8b6593130fe87e26153ae (commit)
via c16bf9a2b17f26c73b5be8aa9a7b4f3570b8f3c1 (commit)
via 45baa7aba39e666d0eed45e140567ce3be62066e (commit)
via a786fa02df431025c8419ccc7d0e8f4023e6eaba (commit)
from 638087de4edc54e2ef26fa7e444b743c433b44cd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 95cb383de7f191fdd4e8796ef52b469be90e5523
Merge: 638087d b2f0388
Author: fujiwara <fujiwara at debian32.private>
Date: Thu Jun 13 14:29:31 2013 +0900
Merge branch 'trac2992'
-----------------------------------------------------------------------
Summary of changes:
src/lib/cc/data.cc | 13 +++++++++----
src/lib/cc/tests/data_unittests.cc | 19 +++++++++++++++++++
2 files changed, 28 insertions(+), 4 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/cc/data.cc b/src/lib/cc/data.cc
index af3602a..ef39753 100644
--- a/src/lib/cc/data.cc
+++ b/src/lib/cc/data.cc
@@ -24,6 +24,8 @@
#include <iostream>
#include <string>
#include <sstream>
+#include <cerrno>
+#include <climits>
#include <boost/algorithm/string.hpp> // for iequals
@@ -398,19 +400,22 @@ fromStringstreamNumber(std::istream& in, int& pos) {
std::string number = numberFromStringstream(in, pos);
+ errno = 0;
i = strtol(number.c_str(), &endptr, 10);
if (*endptr != '\0') {
- d = strtod(number.c_str(), &endptr);
+ const char* ptr;
+ errno = 0;
+ d = strtod(ptr = number.c_str(), &endptr);
is_double = true;
- if (*endptr != '\0') {
+ if (*endptr != '\0' || ptr == endptr) {
isc_throw(JSONError, std::string("Bad number: ") + number);
} else {
- if (d == HUGE_VAL || d == -HUGE_VAL) {
+ if (errno != 0) {
isc_throw(JSONError, std::string("Number overflow: ") + number);
}
}
} else {
- if (i == LONG_MAX || i == LONG_MIN) {
+ if ((i == LONG_MAX || i == LONG_MIN) && errno != 0) {
isc_throw(JSONError, std::string("Number overflow: ") + number);
}
}
diff --git a/src/lib/cc/tests/data_unittests.cc b/src/lib/cc/tests/data_unittests.cc
index 9f015d2..409c951 100644
--- a/src/lib/cc/tests/data_unittests.cc
+++ b/src/lib/cc/tests/data_unittests.cc
@@ -15,6 +15,7 @@
#include <gtest/gtest.h>
#include <boost/foreach.hpp>
#include <boost/assign/std/vector.hpp>
+#include <climits>
#include <cc/data.h>
@@ -146,6 +147,22 @@ TEST(Element, from_and_to_json) {
EXPECT_EQ("100", Element::fromJSON("1e2")->str());
EXPECT_EQ("100", Element::fromJSON("+1e2")->str());
EXPECT_EQ("-100", Element::fromJSON("-1e2")->str());
+
+ // LONG_MAX, -LONG_MAX, LONG_MIN test
+ std::ostringstream longmax, minus_longmax, longmin;
+ longmax << LONG_MAX;
+ minus_longmax << -LONG_MAX;
+ longmin << LONG_MIN;
+ EXPECT_NO_THROW( {
+ EXPECT_EQ(longmax.str(), Element::fromJSON(longmax.str())->str());
+ });
+ EXPECT_NO_THROW( {
+ EXPECT_EQ(minus_longmax.str(), Element::fromJSON(minus_longmax.str())->str());
+ });
+ EXPECT_NO_THROW( {
+ EXPECT_EQ(longmin.str(), Element::fromJSON(longmin.str())->str());
+ });
+
EXPECT_EQ("0.01", Element::fromJSON("1e-2")->str());
EXPECT_EQ("0.01", Element::fromJSON(".01")->str());
EXPECT_EQ("-0.01", Element::fromJSON("-1e-2")->str());
@@ -173,6 +190,8 @@ TEST(Element, from_and_to_json) {
EXPECT_THROW(Element::fromJSON("-1.1e12345678901234567890")->str(), JSONError);
EXPECT_THROW(Element::fromJSON("1e12345678901234567890")->str(), JSONError);
EXPECT_THROW(Element::fromJSON("1e50000")->str(), JSONError);
+ // number underflow
+ EXPECT_THROW(Element::fromJSON("1.1e-12345678901234567890")->str(), JSONError);
}
More information about the bind10-changes
mailing list