On 15.11.2019 09:01, Zoltán Herczeg wrote:
> thank you for the report. I don't have C++Builder, so I would need
> some help. The pattern is quite big, is it possible to simplify it?
> Also bisecting the change which broke it would be a great help as
> well.
Up front: If auto_callout is removed, the AV is removed as well.
Other than that, this is the smallest pattern which still triggers an
AV. I shortened from beginning and end. I also replaced the consecutive
"2" with a hex sequence in case this is easier to debug.
/{'{01{2{{3{{456{{7{'{89{A{BC{D/auto_callout
Interestingly, the AV is now in sljitNativeX86_common.c, line 316:
static SLJIT_INLINE void sljit_unaligned_store_sw(void *addr, sljit_sw
value)
{
SLJIT_MEMCPY(addr, &value, sizeof(value)); // AV now here
}
This is the call stack:
:004aee5e ; _internal_memmove
:004ac115 memcpy(void *,const void *,unsigned int) + 0xD
:0042DB1E sljit_unaligned_store_sw(addr=:001DFFFE, value=-412)
:0042E2EA sljit_generate_code(compiler=:01FE0B10)
:00463473 jit_compile(code=:01FF7B70, mode=1)
:0046383B pcre2_jit_compile_8(code=:01FF7B70, options=7)
:004A46BA process_pattern()
:004AB775 main(argc=2, argv=:020519F8)
:004b887f ; __startup
I will try to bisect later.
Ralf