]> granicus.if.org Git - php/commit
Fixed bug #64769 mbstring PHPTs crash on Windows x64
authorAnatol Belski <ab@php.net>
Wed, 8 May 2013 16:58:32 +0000 (18:58 +0200)
committerAnatol Belski <ab@php.net>
Wed, 8 May 2013 17:22:37 +0000 (19:22 +0200)
commit4091e946606deaf2f8d909e20701bdb832996074
tree00b5c6fa7dc7f837953f11692d3080b51f228561
parent288f04c430b271c416b4cc0a4cef7845927be7b0
Fixed bug #64769 mbstring PHPTs crash on Windows x64

The tricky business going there in oniguruma is saving a pointer
in an int variable, passing that variable into a function and making
it a pointer again. On 64bit windows casting a pointer to a 32 bit
int will truncate that pointer. This kind of things won't work on
Windows x64.

[SNIPPET]
unsigned long ul0[2], ul1, *ul2;

ul0[0] = 42uL;
ul0[0] = 24uL;

ul1 = (unsigned long)ul0;
ul2 = (unsigned long *)ul1;

/* now it's broken, accessing ul2[0] will crash. */
[/SNIPPET]

To make it portable, ULONG_PTR should be used in this case.

In oniguruma this behaviour is to see at least in the following
codepath:

ext/mbstring/oniguruma/enc/unicode.c:10938
ext/mbstring/oniguruma/st.c:308
ext/mbstring/oniguruma/enc/unicode.c:10859
NEWS
ext/mbstring/oniguruma/oniguruma.h
ext/mbstring/oniguruma/st.h