Hi,

yes, it helps a bit, since now the length is 69 on my side as well. However, I 
still cannot see the buffer overflow, since the offset is 64. The value 
(OP_KET) is also correct.

Could you print the re after the "re = (REAL_PCRE *)(PUBL(malloc))(size);" and 
common->start and GET(common->start, 1) as well? If the offset is really 
incorrect, probably common->start-re will not be equal to 56.

Regards,
Zoltan

Ralf Junker <ralfjun...@gmx.de> írta:
>On 13.05.2013 12:36, Zoltán Herczeg wrote:>
>
> this is quite interesting. Am I see right, that your pattern only contains 
> two fixed characters (backslash and space)? On a 32 bit Linux system, in 8 
> bit mode, that is 67 bytes long (56 bytes for header, 11 for pattern) instead 
> of 69. That read access reads byte 63, which is perfect.>
>
The pattern contains, without leading / trailing slahes:>
>
\Q\ \E>
>
The core pattern is one backslash and one space each.>
>
> This is the interesting part:>
> size = sizeof(REAL_PCRE) + (length + cd->names_found * cd->name_entry_size) * 
> sizeof(pcre_uchar);>
> >
> Could you print sizeof(REAL_PCRE), length, and size here?>
>
After this line, the numbers are as follows:>
>
  sizeof(REAL_PCRE) = 56>
  length            = 13>
  size              = 69>
>
Does it matter that I compile with LINK_SIZE=3 ?>
>
Yes, it does. If I recompile with LINK_SIZE=2 (the default), I get these>
numbers:>
>
  sizeof(REAL_PCRE) = 56>
  length            = 11>
  size              = 69>
>
Does this help?>
>
Ralf>


-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to