Fix octal escape generation in c_escape
authorMikko Rasa <tdb@tdb.fi>
Sat, 21 Feb 2009 10:31:55 +0000 (10:31 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sat, 21 Feb 2009 10:31:55 +0000 (10:31 +0000)
Fix mask matching to check for proper range
Don't use uint8_t since it's not supported by MSVC

source/regex.cpp
source/utils.cpp

index 4dc1b830be562d7822498e5637057abf7c53b6c9..9ba089d09008c7fd1c23a9d700051984eab11362 100644 (file)
@@ -324,7 +324,7 @@ Regex::Code Regex::parse_brackets(const string &str, string::const_iterator &ite
        if(end==str.end())
                throw InvalidParameterValue("Unmatched '['");
 
-       uint8_t mask[32]={0};
+       unsigned char mask[32]={0};
        unsigned type=0;
        bool range=false;
        unsigned char first=0, last=0;
@@ -468,11 +468,13 @@ bool Regex::run(const string &str, const string::const_iterator &begin, RegMatch
                                        }
                                        else if(instr==MATCH_MASK)
                                        {
-                                               uint8_t mask[32];
-                                               for(unsigned k=0; k<32; ++k)
-                                                       mask[k]=*j->citer++;
-                                               match_result=mask[c>>3]&(1<<(c&7));
-                                               input_consumed=true;
+                                               if(c>=0 && c<=0xFF)
+                                               {
+                                                       unsigned char m=*(j->citer+(c>>3));
+                                                       match_result=m&(1<<(c&7));
+                                                       input_consumed=true;
+                                                       j->citer+=32;
+                                               }
                                        }
                                        else if(instr==MATCH_ANY)
                                        {
index baf1333138b82807864df7bb1f04ebc7365e3f33..c2bafb9b85527c9b570dea735588397900f4f6ca 100644 (file)
@@ -301,7 +301,7 @@ string c_escape(const string &str, bool escape_8bit)
                        result+="\\\\";
                else if(static_cast<unsigned char>(*i)<' ' || (escape_8bit && (*i&0x80)))
                {
-                       char buf[4]={'\\', '0'+((*i>>6)&7), '0'+((*i>>3)&7), '0'+(*i&7)};
+                       char buf[4]={'\\', '0'+((*i>>6)&3), '0'+((*i>>3)&7), '0'+(*i&7)};
                        result.append(buf, 4);
                }
                else