[php-src] master: ext/standard: Optimize pack() by avoiding redundant padding in pack() string formats (#24133)

From: Date: Mon, 05 Oct 2026 12:03:46 +0000
Subject: [php-src] master: ext/standard: Optimize pack() by avoiding redundant padding in pack() string formats (#24133)
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-141959@lists.php.net to get a copy of this message
Author: Weilin Du (LamentXU123) Committer: GitHub (web-flow) Pusher: LamentXU123 Date: 2026-10-05T20:03:43+08:00 Commit: https://github.com/php/php-src/commit/8ca3fe5148da03464d9c5302e5acbc351b95667c Raw diff: https://github.com/php/php-src/commit/8ca3fe5148da03464d9c5302e5acbc351b95667c.diff ext/standard: Optimize pack() by avoiding redundant padding in pack() string formats (#24133) Changed paths: M UPGRADING M ext/standard/pack.c Diff: diff --git a/UPGRADING b/UPGRADING index a6cdf9829ab1..9ef58ba60078 100644 --- a/UPGRADING +++ b/UPGRADING @@ -99,6 +99,8 @@ PHP 8.7 UPGRADE NOTES . Improved performance of array_splice() when inserting without removing elements. . Improved performance of str_rot13(). + . Improved performance of pack() for large strings using the a, A and Z + formats. - MBString: . Improved performance of mb_strlen for UTF-8 strings. diff --git a/ext/standard/pack.c b/ext/standard/pack.c index 1da93228f71f..c8cbf8613f63 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -559,9 +559,12 @@ PHP_FUNCTION(pack) zend_string *tmp_str; zend_string *str = zval_get_tmp_string(&argv[currentarg++], &tmp_str); - memset(&ZSTR_VAL(output)[outputpos], (code == 'a' || code == 'Z') ? '\0' : ' ', arg); - memcpy(&ZSTR_VAL(output)[outputpos], ZSTR_VAL(str), - (ZSTR_LEN(str) < arg_cp) ? ZSTR_LEN(str) : arg_cp); + arg_cp = MIN(ZSTR_LEN(str), arg_cp); + if (arg_cp < arg) { + memset(&ZSTR_VAL(output)[outputpos + arg_cp], + (code == 'a' || code == 'Z') ? '\0' : ' ', arg - arg_cp); + } + memcpy(&ZSTR_VAL(output)[outputpos], ZSTR_VAL(str), arg_cp); outputpos += arg; zend_tmp_string_release(tmp_str);

« previous php.cvs (#141959) next »