WS_Assert_Allocated failing in backref() also with a339f63q
Follow-up #3 (closed)
If we don't copy the terminating NULL, we can't use strlen()
for the check. We should probably use ov->ovector[1]
(gdb) bt
#0 0x00007fd1387271d7 in raise () from /lib64/libc.so.6
#1 0x00007fd1387288c8 in abort () from /lib64/libc.so.6
#2 0x00000000004424c2 in pan_ic (func=0x4e2650 <__func__.7406> "WS_Assert_Allocated", file=0x4e23a2 "cache/cache_ws.c", line=84,
cond=0x4e2490 "p >= ws->s && (p + len) <= ws->f", kind=VAS_ASSERT) at cache/cache_panic.c:665
#3 0x0000000000463836 in WS_Assert_Allocated (ws=0x7fd0ce226208, ptr=0x7fd0ce228ac0, len=82) at cache/cache_ws.c:84
#4 0x00007fd11d3e89e6 in backref (ctx=0x7fd0f51291b0, refnum=1, fallback=0x7fd138465bb2 <Address 0x7fd138465bb2 out of bounds>,
task=0x7fd0dc00e758) at vmod_re.c:220
#5 0x00007fd11d3e8d89 in vmod_regex_backref (ctx=0x7fd0f51291b0, re=0x7fd137c0fce0, refnum=1,
fallback=0x7fd138465bb2 <Address 0x7fd138465bb2 out of bounds>) at vmod_re.c:263
(gdb) frame 4
#4 0x00007fd11d3e89e6 in backref (ctx=0x7fd0f51291b0, refnum=1, fallback=0x7fd138465bb2 <Address 0x7fd138465bb2 out of bounds>,
task=0x7fd0dc00e758) at vmod_re.c:220
(gdb) print *ctx->ws
$1 = {magic = 905626964, id = "req", s = 0x7fd0ce228008 "GET", f = 0x7fd0ce228ae8 "5476*REDACTED*",
r = 0x0, e = 0x7fd0ce245ff8 "\025"}
(gdb) print *(ov_t *)task->priv
$3 = {magic = 2219571769,
subject = 0x7fd0ce228ac0 "X-Forwarded-Proto,Accept-Encoding=1495015476*REDACTED*", ovector = {0, 33,
-1, -1, -1, -1, 17, 18, 18, 33, -1 <repeats 12 times>}}