]> granicus.if.org Git - re2c/commitdiff
- Actually we can have better checks
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 3 Mar 2008 23:35:22 +0000 (23:35 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 3 Mar 2008 23:35:22 +0000 (23:35 +0000)
re2c/bootstrap/scanner.cc
re2c/scanner.h
re2c/scanner.re

index c546ab920b6486cc057e4c2acb20bc5a72276f18..107139ecf692668ad91a49ad5ab1bbb445668a08 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.3.dev on Tue Mar  4 00:16:12 2008 */
+/* Generated by re2c 0.13.3.dev on Tue Mar  4 00:28:13 2008 */
 /* $Id$ */
 #include <stdlib.h>
 #include <string.h>
@@ -1746,9 +1746,9 @@ Scanner::~Scanner()
        }
 }
 
-void Scanner::check_token_length(uint len) const
+void Scanner::check_token_length(char *pos, uint len) const
 {
-       if (len >= BSIZE)
+       if (pos < bot || pos + len >= top)
        {
                fatal("Token exceeds limit");
        }
index 4aa3bb53f24e9f024f30ed5e2c560497db8647d4..661b544f46139fc26cedd822d91611b09ca58a3b 100644 (file)
@@ -18,7 +18,7 @@ private:
        std::istream&   in;
        std::ostream&   out;
        char    *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof, *ctx;
-       uint    tchar, tline, cline, iscfg;
+       uint    tchar, tline, cline, iscfg, buf_size;
 
 private:
        char *fill(char*);
@@ -39,7 +39,7 @@ public:
        void config(const Str&, int);
        void config(const Str&, const Str&);
 
-       void check_token_length(uint len) const;
+       void check_token_length(char *pos, uint len) const;
        SubStr token() const;
        SubStr token(uint start, uint len) const;
        SubStr raw_token(std::string enclosure) const;
@@ -66,13 +66,13 @@ inline void Scanner::fatal(const char *msg) const
 
 inline SubStr Scanner::token() const
 {
-       check_token_length(cur - tok);
+       check_token_length(tok, cur - tok);
        return SubStr(tok, cur - tok);
 }
 
 inline SubStr Scanner::token(uint start, uint len) const
 {
-       check_token_length(len);
+       check_token_length(tok + start, len);
        return SubStr(tok + start, len);
 }
 
index 5261e699a6c3f36873c2ebce307071aaed813335..9aa3336f4034da21a014198191acd8265a1e3882 100644 (file)
@@ -626,9 +626,9 @@ Scanner::~Scanner()
        }
 }
 
-void Scanner::check_token_length(uint len) const
+void Scanner::check_token_length(char *pos, uint len) const
 {
-       if (len >= BSIZE)
+       if (pos < bot || pos + len >= top)
        {
                fatal("Token exceeds limit");
        }