Two things I didn't mention in that bug close: (1) This is already "fixed" in PHP5 which uses "struct php_process_handle" to store the child PID and other values. It is malloced into a pointer and will not throw this type of error.
(2) Saying "whoever did that was wrong" is unprofessional, particularly given #1 above. While I agree that storing integer data in a void* element is a bad idea, it is nonetheless a functional one. "James Devenish" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Hi, > > In message <[EMAIL PROTECTED]> > on Sat, Jan 03, 2004 at 11:28:15AM +0100, Ard Biesheuvel wrote: > > > Here is the code in exec.c, > > > ----------------------------------------------------------- > > > line# 586: pid_t child, wait_pid; > > > line# 587: > > > line# 588: child = (pid_t)rsrc->ptr; > > > > [EMAIL PROTECTED] wrote: > > >rsrc->ptr is a generic use "bucket". Generally it's meant to hold a > > >pointer to some data. In this case, pid_t is trusted to never have a > > >larger storage size than void* (to do so would require 16-bit pointers > > >and 32-bit PIDs or 32-bit pointers and 64-bit PIDs, etc...) so rather > > >than malloc()ing a container for child, we just drop child itself into > > >the pointer bucket. > > I plead with you not to continue using habits that make PHP non-portable > (or at least that you acknowledge the need for proper, non-bodged, > ./configure tests)! Non-portable shortcuts and weird hard-coded values > continue to appear in PHP from year-to-year and it's frustrating for > administrators of machines running PHP. > > Although some developers love using "won't fix" or "don't care for > anyone to fix it" for bugs, you must generally *not* store arithmetic > values in pointer storage, unless you are assigning zero. My > understanding is that the consequences violating the constraints on C > assignments must be considered "implementation-defined" (e.g. some > environments could map all non-pointer values to zero) and may cause > errors if they are unrepresentable as pointers. Pointers types are not > strictly arithmetic integer types. I'm sure you get away with abusing > them on most systems, but it is bad form to consider this a portable > technique. Perhaps there is even the possibility that some environments, > as part of runtime checks and balances, will signal a process merely > upon assignment of out-of-range pointer values. But aside from that, > past experience seems to have shown that poking integers into pointers > leads to an accumulation of back-to-front assignments and conversion > errors. > > > How about doing this > > child = (long)rsrc->ptr; > > ?? -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php