Antony Dovgal wrote:
> On 31.08.2006 12:22, Michael Wallner wrote:
>> Antony Dovgal wrote:
>>> tony2001        Wed Aug 30 22:52:18 2006 UTC
>>>
>>>   Modified files:                  /php-src/ext/tidy    tidy.c   Log:
>>>   fix tidy problems caused by returning local static buffers
>>>   looks like somebody forgot to MFB this patch..
>>
>> What problems?  It's actually been an optimization attempt, not
>> a forgotten MFB.
> 
> # ./sapi/cli/php -r 'tidy_repair_string("");'
> [Thu Aug 31 02:43:25 2006]  Script:  '-'
> ---------------------------------------
> /local/dev/orig/php-src_head/Zend/zend_variables.h(35) : Block
> 0x083941B0 status:
> /local/dev/orig/php-src_head/Zend/zend_variables.c(40) : Actual location
> (location was relayed)
> Invalid pointer: ((thread_id=0x00000108) != (expected=0x40528C60))
> ---------------------------------------
> 
> Returning pointer to local static buffer is generally bad idea and it
> was the reason for such warnings in ZTS mode.
> 

It's not a local static buffer, but somehow the alloc callbacks get only
installed when one creates a tidy object, though it should happen on MINIT,
IMHO.

Index: ext/tidy/tidy.c
===================================================================
RCS file: /repository/php-src/ext/tidy/tidy.c,v
retrieving revision 1.93
diff -u -p -d -r1.93 tidy.c
--- ext/tidy/tidy.c     14 Aug 2006 15:17:03 -0000      1.93
+++ ext/tidy/tidy.c     31 Aug 2006 12:31:07 -0000
@@ -560,11 +560,6 @@ static void tidy_object_new(zend_class_e
                        break;

                case is_doc:
-                       tidySetMallocCall(php_tidy_malloc);
-                       tidySetReallocCall(php_tidy_realloc);
-                       tidySetFreeCall(php_tidy_free);
-                       tidySetPanicCall(php_tidy_panic);
-
                        intern->ptdoc = emalloc(sizeof(PHPTidyDoc));
                        intern->ptdoc->doc = tidyCreate();
                        intern->ptdoc->ref_count = 1;
@@ -943,6 +938,11 @@ static int php_tidy_parse_string(PHPTidy

 static PHP_MINIT_FUNCTION(tidy)
 {
+       tidySetMallocCall(php_tidy_malloc);
+       tidySetReallocCall(php_tidy_realloc);
+       tidySetFreeCall(php_tidy_free);
+       tidySetPanicCall(php_tidy_panic);
+
        REGISTER_INI_ENTRIES();
        REGISTER_TIDY_CLASS(tidy, doc,  NULL, 0);
        REGISTER_TIDY_CLASS(tidyNode, node,     NULL, ZEND_ACC_FINAL_CLASS);


-- 
Michael

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

Reply via email to