diff --git a/vlib/regex/regex.v b/vlib/regex/regex.v index ae7c54722e..a995faf51a 100644 --- a/vlib/regex/regex.v +++ b/vlib/regex/regex.v @@ -2429,7 +2429,8 @@ pub fn (mut re RE) match_base(in_txt &u8, in_txt_len int) (int, int) { // println("ist_simple_char") state.match_flag = false - if re.prog[state.pc].ch == ch { + if re.prog[state.pc].ch == ch + && (state.i < in_txt_len - 1 || re.prog[state.pc].ch != 0) { state.match_flag = true l_ist = regex.ist_simple_char diff --git a/vlib/regex/regex_test.v b/vlib/regex/regex_test.v index 1bbf892104..9d97af0bd6 100644 --- a/vlib/regex/regex_test.v +++ b/vlib/regex/regex_test.v @@ -185,6 +185,14 @@ match_test_suite = [ // test last charr classes neg class TestItem{"/a/", r"^/a/[^/]+$", -1,3}, TestItem{"/a/b",r"^/a/[^/]+$", 0,4}, + + // test `\0` as terminator + TestItem{"abc", "^abc\0$", -1,3}, + TestItem{"abc\0", "^abc\0$", 0,4}, + + // test has `\0` chars + TestItem{"abcxyz", "^abc\0xyz$", -1,3}, + TestItem{"abc\0xyz", "^abc\0xyz$", 0,7}, ] )