I've looked at it in the debugger immediately before the access violation
and have found that both the pointer to the char* to be copied and the
length are garbage, so it's not the lib.

> -----Original Message-----
> From: Rose, Billy [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, April 09, 2002 3:29 PM
> To: 'Joseph Tate'; Rose, Billy; Php-Dev List
> Subject: RE: [PHP-DEV] zend questions and bug #15333
>
>
> In your stack dump, the function call that bombed was memcpy in
> the MS lib.
> Looking at the source in zend_alloc.c, I find that the lib's
> memcpy function
> is used. The way I finally tracked down my problem was tedious as
> hell, but
> I put the MS debug macro just before the function that was
> failing (in this
> case zend_strndup). Then I single stepped into the MS function that was
> failing. This method was required because I was running a
> service. I bet if
> you write an adhoc my_memcpy function in C and byte for byte copy over the
> string, the problem goes away. memcpy uses the same 32 bit
> algorothm as the
> string functions. I sent in a bug report to MS about a year ago, but was
> blown off (swept under the rug rather perhaps?). The algorithm
> seems to blow
> up only under weird circumstances.
>
> Billy Rose
> [EMAIL PROTECTED]
>
> > -----Original Message-----
> > From: Joseph Tate [mailto:[EMAIL PROTECTED]]
> > Sent: Tuesday, April 09, 2002 2:05 PM
> > To: Rose, Billy; Php-Dev List
> > Subject: RE: [PHP-DEV] zend questions and bug #15333
> >
> >
> > zend_strndup is a php implementation.  It does not use the
> > strndup function
> > available through MS's library.  The problem occurs because a
> > length of
> > 1000000 or more is passed in, signifying to me that the source of that
> > length has become corrupted or not initialized.  I've traced
> > that back to
> > the global_constants_table structure.  I no longer get the
> > specific error
> > mentioned in the bug report, but get an error in the same
> > location under the
> > same circumstances.  My error looks like the following:
> >
> > The HTTP server encountered an unhandled exception while
> > processing the
> > ISAPI Application '
> > msvcrt!memcpy + 0x33
> > php4ts!zend_strndup + 0x38
> > php4ts!zend_get_extension + 0xA0
> > php4ts!zend_hash_copy + 0x7B
> > php4ts!zend_get_extension + 0xFB
> > php4ts!zend_print_zval_r_ex + 0x999
> > php4ts!ts_resource_ex + 0x21F
> > php4ts!ts_resource_ex + 0x98
> > php4isapi!HttpExtensionProc + 0x37
> > wam + 0x7A91
> > wam + 0x8634
> > RPCRT4!NdrServerInitialize + 0x45B
> > RPCRT4!NdrStubCall2 + 0x1A5
> > RPCRT4!CStdStubBuffer_Invoke + 0x82
> > ole32!StgGetIFillLockBytesOnFile + 0xA270
> > ole32!StgGetIFillLockBytesOnFile + 0xA21F
> > ole32!CoImpersonateClient + 0x1B8
> >  + 0xFF6C8BE0
> >  + 0x1132AE13
> > '.
> >
> > Of course I'm using the Release_TSDbg version of php4isapi
> > rather than a
> > release, so that's why I have a stack trace.  All of this is with the
> > current PHP_4_2_0 release branch.
> >
> > Joseph
> >
> > > -----Original Message-----
> > > From: Rose, Billy [mailto:[EMAIL PROTECTED]]
> > > Sent: Tuesday, April 09, 2002 2:54 PM
> > > To: 'Joseph Tate'; Php-Dev List
> > > Subject: RE: [PHP-DEV] zend questions and bug #15333
> > >
> > >
> > > Forgot to mention, the algorithm in the MS lib is what is faulty. It
> > > overruns the buffer at times.
> > >
> > > Billy Rose
> > > [EMAIL PROTECTED]
> > >
> > > > -----Original Message-----
> > > > From: Joseph Tate [mailto:[EMAIL PROTECTED]]
> > > > Sent: Tuesday, April 09, 2002 1:41 PM
> > > > To: Php-Dev List
> > > > Subject: [PHP-DEV] zend questions and bug #15333
> > > >
> > > >
> > > > http://bugs.php.net/15333
> > > >
> > > > I've narrowed down the problem, but can't seem to get
> > > > anywhere with it.
> > > >
> > > > The state of the server when the problem occurrs:
> > > >
> > > > All serviceable threads have been killed or have timed out.
> > > > A request is received prompting the spawning of a new thread.
> > > > The new thread then goes through and copies the
> > > > global_constants_table, but
> > > > that has been corrupted somewhere causing an access violation
> > > > when trying to
> > > > dereference uninitialized memory.
> > > >
> > > > This happens every time the server has been idle for ~10
> > minutes after
> > > > serving up php pages.
> > > >
> > > > Here are my questions that I haven't been able to track down
> > > > yet.  Hopefully
> > > > someone can save me some time.
> > > >
> > > > 1.      What code is executed when a thread times out?
> > > > zend_shutdown never seems
> > > > to run (or at least my breakpoints there never fire).
> > > >
> > > > 2.      It appears that global_constants_table is not global
> > > > nor constant, each
> > > > thread has a separate copy.  Why is this the case?  And if it
> > > > is meant to
> > > > be, where is the original global_constants_table.  What could
> > > > be modifying
> > > > it so that it cannot be copied when a new thread is started?
> > > >
> > > > 3.      Where would be a good place to start to find the
> > > > answers to the zend
> > > > questions that I have as I track this down.
> > > >
> > > >
> > > > --
> > > > PHP Development Mailing List <http://www.php.net/>
> > > > To unsubscribe, visit: http://www.php.net/unsub.php
> > > >
> >
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to