@@ -844,16 +844,15 @@ void xml_characterDataHandler(void *userData, const XML_Char *s, int len)
844844 zval * myval ;
845845 /* check if the current tag already has a value - if yes append to that! */
846846 if ((myval = zend_hash_find (Z_ARRVAL_P (ctag ), ZSTR_KNOWN (ZEND_STR_VALUE ))) && Z_TYPE_P (myval ) == IS_STRING ) {
847- size_t newlen = Z_STRLEN_P (myval ) + ZSTR_LEN (decoded_value );
848- Z_STR_P (myval ) = zend_string_extend (Z_STR_P (myval ), newlen , 0 );
847+ Z_STR_P (myval ) = zend_string_safe_realloc (Z_STR_P (myval ), 1 , Z_STRLEN_P (myval ), ZSTR_LEN (decoded_value ), false);
849848 strncpy (Z_STRVAL_P (myval ) + Z_STRLEN_P (myval ) - ZSTR_LEN (decoded_value ),
850849 ZSTR_VAL (decoded_value ), ZSTR_LEN (decoded_value ) + 1 );
851- zend_string_release_ex (decoded_value , 0 );
850+ zend_string_release_ex (decoded_value , false );
852851 } else {
853852 if (doprint || (! parser -> skipwhite )) {
854853 add_assoc_str (ctag , "value" , decoded_value );
855854 } else {
856- zend_string_release_ex (decoded_value , 0 );
855+ zend_string_release_ex (decoded_value , false );
857856 }
858857 }
859858 } else {
@@ -871,11 +870,10 @@ void xml_characterDataHandler(void *userData, const XML_Char *s, int len)
871870 if (EXPECTED (Z_TYPE_P (mytype ) == IS_STRING ) && zend_string_equals_literal (Z_STR_P (mytype ), "cdata" )) {
872871 SEPARATE_ARRAY (curtag );
873872 if ((myval = zend_hash_find (Z_ARRVAL_P (curtag ), ZSTR_KNOWN (ZEND_STR_VALUE )))) {
874- size_t newlen = Z_STRLEN_P (myval ) + ZSTR_LEN (decoded_value );
875- Z_STR_P (myval ) = zend_string_extend (Z_STR_P (myval ), newlen , 0 );
873+ Z_STR_P (myval ) = zend_string_safe_realloc (Z_STR_P (myval ), 1 , Z_STRLEN_P (myval ), ZSTR_LEN (decoded_value ), false);
876874 strncpy (Z_STRVAL_P (myval ) + Z_STRLEN_P (myval ) - ZSTR_LEN (decoded_value ),
877875 ZSTR_VAL (decoded_value ), ZSTR_LEN (decoded_value ) + 1 );
878- zend_string_release_ex (decoded_value , 0 );
876+ zend_string_release_ex (decoded_value , false );
879877 return ;
880878 }
881879 }
@@ -894,7 +892,7 @@ void xml_characterDataHandler(void *userData, const XML_Char *s, int len)
894892 } else if (parser -> level == (XML_MAXLEVEL + 1 )) {
895893 php_error_docref (NULL , E_WARNING , "Maximum depth exceeded - Results truncated" );
896894 } else {
897- zend_string_release_ex (decoded_value , 0 );
895+ zend_string_release_ex (decoded_value , false );
898896 }
899897 }
900898}
0 commit comments