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