Bug 12076 – ctRegex range violation

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2014-02-04T15:42:00Z
Last change time
2014-02-24T09:50:10Z
Keywords
pull
Assigned to
nobody
Creator
mk

Comments

Comment #0 by mk — 2014-02-04T15:42:38Z
I get range violation in ctRegex after this commit: https://github.com/D-Programming-Language/phobos/commit/f1eadb913608ad1e1acd800e6c36b2b50b2a9f12 import std.stdio, std.regex; void main() { auto RE = ctRegex!(r"(?<!x\w+)\s(\w+)"); string s = "one two"; auto m = matchFirst(s, RE); } --------------------- [email protected](5982): Range violation ---------------- ./regexbug(_d_array_bounds+0x16) [0x80ea846] ./regexbug() [0x80f2402] ./regexbug(@trusted bool std.regex.ctRegexImpl!("(?<!x\w+)\s(\w+)", []).func(ref std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char).BacktrackingMatcher).matcher_0(ref std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char, std.regex.Input!(char).Input.BackLooper).BacktrackingMatcher)+0x157) [0x80d1d37] ./regexbug(@trusted bool std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char, std.regex.Input!(char).Input.BackLooper).BacktrackingMatcher.matchImpl()+0x39) [0x80e4979] ./regexbug(@trusted bool std.regex.ctRegexImpl!("(?<!x\w+)\s(\w+)", []).func(ref std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char).BacktrackingMatcher)+0x1c1) [0x80d18f1] ./regexbug(@trusted bool std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char).BacktrackingMatcher.matchImpl()+0x39) [0x80e30b1] ./regexbug(@trusted bool std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char).BacktrackingMatcher.matchFinalize()+0x42) [0x80e2e6a] ./regexbug(@trusted bool std.regex.BacktrackingMatcher!(true).BacktrackingMatcher!(char).BacktrackingMatcher.match(std.regex.Group!(uint).Group[])+0xdd) [0x80e2fcd] ./regexbug(@trusted std.regex.Captures!(immutable(char)[], uint).Captures std.regex.__T9matchOnceS613std5regex28__T19BacktrackingMatcherVb1Z19BacktrackingMatcherTS3std5regex19__T11StaticRegexTaZ11StaticRegexTAyaZ.matchOnce(immutable(char)[], std.regex.StaticRegex!(char).StaticRegex)+0xe0) [0x80e37e8] ./regexbug(@safe std.regex.Captures!(immutable(char)[], uint).Captures std.regex.matchFirst!(immutable(char)[], std.regex.StaticRegex!(char).StaticRegex).matchFirst(immutable(char)[], std.regex.StaticRegex!(char).StaticRegex)+0x29) [0x80e36f1] ./regexbug(_Dmain+0x26002) [0x80d1722] ./regexbug(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll().void __lambda1()+0x10) [0x80ec168] ./regexbug(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x18) [0x80ec0e0] ./regexbug(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()+0x27) [0x80ec12f] ./regexbug(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x18) [0x80ec0e0] ./regexbug(_d_run_main+0x117) [0x80ec077] ./regexbug(main+0x14) [0x80e7fdc] /lib/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xeb5f2ca6] ./regexbug() [0x80ab681] --------------------------- Normal regex() works. DMD32 D Compiler v2.065-devel-e493324 Linux
Comment #1 by mk — 2014-02-05T05:49:17Z
ok, that was a bit premature, looks like not a regression and not caused by the commit from comment 0, so downgrading now.
Comment #2 by dmitry.olsh — 2014-02-22T13:00:23Z
Comment #3 by github-bugzilla — 2014-02-24T06:41:16Z
Commits pushed to master at https://github.com/D-Programming-Language/phobos https://github.com/D-Programming-Language/phobos/commit/01e0acddd64449f5b4bd98aaeb59ac41bb5a8f19 fix issue 12076 Lookaround in ctRegex used wrong number of total captures thus missing both a bit of optimization AND a special case of 0 matches. The latter is the reason of range violation in issue 12076. https://github.com/D-Programming-Language/phobos/commit/1ca127265ae7db2f612411672410a9945c240fa1 Merge pull request #1958 from blackwhale/issue-12076 fix issue 12076