Ver Fonte

Don't use parseInt in cookie_helper

Tatsuhiro Tsujikawa há 13 anos atrás
pai
commit
a879d75aaa
1 ficheiros alterados com 19 adições e 5 exclusões
  1. 19 5
      src/cookie_helper.cc

+ 19 - 5
src/cookie_helper.cc

@@ -65,6 +65,20 @@ std::string::const_iterator getNextDigit
 }
 } // namespace
 
+namespace {
+template<typename InputIterator>
+int getInteger(InputIterator first, InputIterator last)
+{
+  int res = 0;
+  // We assume *dest won't overflow.
+  for(; first != last; ++first) {
+    res *= 10;
+    res += (*first)-'0';
+  }
+  return res;
+}
+} // namespace
+
 bool parseDate
 (time_t& time,
  std::string::const_iterator first,
@@ -117,9 +131,9 @@ bool parseDate
         goto NOT_TIME;
       }
       foundTime = true;
-      hour = util::parseInt(std::string((*i).begin(), hEnd));
-      minute = util::parseInt(std::string(hEnd+1, mEnd));
-      second = util::parseInt(std::string(mEnd+1, sEnd));
+      hour = getInteger((*i).begin(), hEnd);
+      minute = getInteger(hEnd+1, mEnd);
+      second = getInteger(mEnd+1, sEnd);
       continue;
     NOT_TIME:
       ;
@@ -129,7 +143,7 @@ bool parseDate
       size_t len = std::distance((*i).begin(), j);
       if(1 <= len && len <= 2) {
         foundDayOfMonth = true;
-        dayOfMonth = util::parseInt(std::string((*i).begin(), j));
+        dayOfMonth = getInteger((*i).begin(), j);
         continue;
       }
     }
@@ -160,7 +174,7 @@ bool parseDate
       size_t len = std::distance((*i).begin(), j);
       if(1 <= len && len <= 4) {
         foundYear = true;
-        year = util::parseInt(std::string((*i).begin(), j));
+        year = getInteger((*i).begin(), j);
         continue;
       }
     }