]> git.tdb.fi Git - libs/core.git/blobdiff - source/strings/regex.cpp
Don't access iterator if it's at end
[libs/core.git] / source / strings / regex.cpp
index 9167c6b8a9e6ae0f75fd52206bb96efe45a9424b..c62405614525dd85b32a73361bd78133e03ef29f 100644 (file)
@@ -1,6 +1,7 @@
 #include <limits>
 #include <list>
 #include <stack>
+#include <vector>
 #include "format.h"
 #include "regex.h"
 
@@ -129,7 +130,8 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns
 
                        Count repeat_min = 1;
                        Count repeat_max = 1;
-                       parse_repeat(expr, i, repeat_min, repeat_max);
+                       if(i!=end)
+                               parse_repeat(expr, i, repeat_min, repeat_max);
 
                        for(unsigned j=0; j<repeat_min; ++j)
                                result += atom;
@@ -142,7 +144,7 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns
                                        result += atom;
                                }
                                result += ND_JUMP;
-                               write_int<Offset>(-(atom.size()+jump_size), result);
+                               write_int<Offset>(-static_cast<Offset>(atom.size()+jump_size), result);
                        }
                        else if(repeat_max>repeat_min)
                        {
@@ -157,7 +159,7 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns
        }
        else
        {
-               list<Code> branches;
+               vector<Code> branches;
                for(auto i=iter;;)
                {
                        branches.push_back(compile(expr, i, group, true));