]> granicus.if.org Git - re2c/commitdiff
fix a memory error detected with valgrind in raw_token() (the string returned by...
authornuno-lopes <nuno-lopes@642ea486-5414-0410-9d7f-a0204ed87703>
Wed, 9 Apr 2008 22:57:45 +0000 (22:57 +0000)
committernuno-lopes <nuno-lopes@642ea486-5414-0410-9d7f-a0204ed87703>
Wed, 9 Apr 2008 22:57:45 +0000 (22:57 +0000)
re2c/code.cc
re2c/scanner.h
re2c/substr.cc
re2c/substr.h

index 761b6cdac4ee6ccf89923c9a77ff595de525bbfd..cb304428f62212dd3da34b0bd3e06dd51b6c182b 100644 (file)
@@ -2450,9 +2450,9 @@ void Scanner::check_token_length(char *pos, uint len) const
        }
 }
 
-SubStr Scanner::raw_token(std::string enclosure) const
+Str Scanner::raw_token(std::string enclosure) const
 {
-       return SubStr(std::string(enclosure + token().to_string() + enclosure).c_str());
+       return Str(std::string(enclosure + token().to_string() + enclosure).c_str());
 }
 
 void Scanner::reuse()
index db6528f8bea61b558251f984feb234ac495d93e0..3e59d3a010fec3f902d253b90a7839c811efdd84 100644 (file)
@@ -67,7 +67,7 @@ public:
        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;
+       Str raw_token(std::string enclosure) const;
        virtual uint get_line() const;  
        uint xlat(uint c) const;
 
index 771a925f3c1873b8370fa43067cef9a237f04234..1b6f5d7bf8b1ec17d588e132698c2ddcf886a902 100644 (file)
@@ -43,6 +43,12 @@ Str::Str(Str& s)
        s.len = 0;
 }
 
+Str::Str(const char *s)
+       : SubStr(strdup(s), strlen(s))
+{
+       ;
+}
+
 Str::Str()
        : SubStr((char*) NULL, 0)
 {
@@ -55,8 +61,8 @@ Str::~Str()
        if (str) {
                free((void*)str);
        }
-       str = (char*) - 1;
-       len = (uint) - 1;
+       str = NULL;
+       len = 0;
 }
 
 } // end namespace re2c
index 26fcb3be831c4b68ac9271b05ad352dc54f7f3b9..e65231802f067ac526e7b128bc62935e948babe2 100644 (file)
@@ -38,6 +38,7 @@ class Str: public SubStr
 public:
        Str(const SubStr&);
        Str(Str&);
+       Str(const char*);
        Str();
        ~Str();
 };