]> granicus.if.org Git - re2c/commitdiff
- Add overflow tests (we allow 8K max input right now)
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 3 Mar 2008 23:23:22 +0000 (23:23 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 3 Mar 2008 23:23:22 +0000 (23:23 +0000)
re2c/bootstrap/scanner.cc
re2c/scanner.h
re2c/scanner.re

index d481b24010bcd640d6279698273fa74c3faf3b93..c546ab920b6486cc057e4c2acb20bc5a72276f18 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.3.dev on Sun Mar  2 21:34:25 2008 */
+/* Generated by re2c 0.13.3.dev on Tue Mar  4 00:16:12 2008 */
 /* $Id$ */
 #include <stdlib.h>
 #include <string.h>
@@ -1746,6 +1746,14 @@ Scanner::~Scanner()
        }
 }
 
+void Scanner::check_token_length(uint len) const
+{
+       if (len >= BSIZE)
+       {
+               fatal("Token exceeds limit");
+       }
+}
+
 SubStr Scanner::raw_token(std::string enclosure) const
 {
        return SubStr(std::string(enclosure + token().to_string() + enclosure).c_str());
index bcfda39b94e8bf9beee87ebd4834b27a2476e2f5..4aa3bb53f24e9f024f30ed5e2c560497db8647d4 100644 (file)
@@ -39,6 +39,7 @@ public:
        void config(const Str&, int);
        void config(const Str&, const Str&);
 
+       void check_token_length(uint len) const;
        SubStr token() const;
        SubStr token(uint start, uint len) const;
        SubStr raw_token(std::string enclosure) const;
@@ -65,11 +66,13 @@ inline void Scanner::fatal(const char *msg) const
 
 inline SubStr Scanner::token() const
 {
+       check_token_length(cur - tok);
        return SubStr(tok, cur - tok);
 }
 
 inline SubStr Scanner::token(uint start, uint len) const
 {
+       check_token_length(len);
        return SubStr(tok + start, len);
 }
 
index a19113da6320da86e1dc0df51eaf2fd9d7257161..5261e699a6c3f36873c2ebce307071aaed813335 100644 (file)
@@ -626,6 +626,14 @@ Scanner::~Scanner()
        }
 }
 
+void Scanner::check_token_length(uint len) const
+{
+       if (len >= BSIZE)
+       {
+               fatal("Token exceeds limit");
+       }
+}
+
 SubStr Scanner::raw_token(std::string enclosure) const
 {
        return SubStr(std::string(enclosure + token().to_string() + enclosure).c_str());