Skip to content

Commit c8c48f5

Browse files
committed
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4: ext/xml: Use zend_string_safe_realloc() for cdata concatenation.
2 parents 0288015 + d5a57af commit c8c48f5

1 file changed

Lines changed: 6 additions & 8 deletions

File tree

ext/xml/xml.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)