瀏覽代碼

Have tor_parse_*long functions check for negative bases

One of our unit tests checks that they behave correctly (giving an
error) when the base is negative.  But there isn't a guarantee that
strtol and friends actually handle negative bases correctly.

Found by Coverity Scan; fix for CID 504.
Nick Mathewson 12 年之前
父節點
當前提交
56e0959d2a
共有 1 個文件被更改,包括 16 次插入0 次删除
  1. 16 0
      src/common/util.c

+ 16 - 0
src/common/util.c

@@ -906,6 +906,11 @@ tor_parse_long(const char *s, int base, long min, long max,
   char *endptr;
   long r;
 
+  if (base < 0) {
+    if (ok)
+      *ok = 0;
+    return 0;
+  }
   r = strtol(s, &endptr, base);
   CHECK_STRTOX_RESULT();
 }
@@ -918,6 +923,11 @@ tor_parse_ulong(const char *s, int base, unsigned long min,
   char *endptr;
   unsigned long r;
 
+  if (base < 0) {
+    if (ok)
+      *ok = 0;
+    return 0;
+  }
   r = strtoul(s, &endptr, base);
   CHECK_STRTOX_RESULT();
 }
@@ -942,6 +952,12 @@ tor_parse_uint64(const char *s, int base, uint64_t min,
   char *endptr;
   uint64_t r;
 
+  if (base < 0) {
+    if (ok)
+      *ok = 0;
+    return 0;
+  }
+
 #ifdef HAVE_STRTOULL
   r = (uint64_t)strtoull(s, &endptr, base);
 #elif defined(_WIN32)