On Thu, Mar 24, 2016 at 8:49 AM, Jan Ehrhardt <php...@ehrhardt.nl> wrote:
> William A Rowe Jr in gmane.comp.apache.devel (Thu, 24 Mar 2016 07:58:45 > -0500): > >Precisely, Jan. We don't know where these truncation errors lead - do > they > >portentially open security holes? They cetainly interefere with serving > >huge resources such as .iso images. > > > >When I first tripped over this, I breifly pondered putting together a > >patch. PHP, httpd (through apr) dealt with all this long ago. > > Apparently, you never compiled PHP 5.5/5.6/7.0 on Windows 64-bits. There > are loads of 'possible loss of data' warnings. See for yourself: > > http://windows.php.net/downloads/snaps/master/r454ae8a/logs/make-ts-windows-vc14-x64-r454ae8a.html It's been a *long* time, and I know it hadn't been that well maintained for non-Linux (non-BSD) target architectures. > Even in the 32-bits PHP 7 there are some: > > http://windows.php.net/downloads/snaps/master/r454ae8a/logs/make-ts-windows-vc14-x86-r454ae8a.html With a bit of luck - many of these are resolved by simply jumping up to Visual Studio 2015 (and removing any number of win32-specific bandaids that covered some warts in the earlier stdc lib)? Remaining errors likely still need fixing. That sizeof(int) == sizeof(void *) assumption from 64ILP architectures is *not* part of the spec. We have 64ILP (int == long == void*), 64LP (long == void* != int) as well as 64P (long == int != void*) and each of these are valid architectures. The various types such as ptrdiff_t that POSIX exposes *should* resolve these all when the correct types are chosen, and that is now true with MSVC 14 on Windows as well. It just becomes a matter of using the true and correct type for various operations. Cheers, Bill