summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-01-14 10:23:44 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-01-14 10:23:44 +0100
commitd6212835f2c21d6a0dc75bc25b636ce631bff38c (patch)
tree1b9c10a8dea226176c350336090e72badb10eb6e
parente3e2a7f7a884c1f2a2740a5fbd9118d301d65635 (diff)
parent3ad0ebdf5cdc6dbe077685907d012eaeac7ea6e4 (diff)
downloadphp-git-d6212835f2c21d6a0dc75bc25b636ce631bff38c.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
-rw-r--r--NEWS2
-rw-r--r--ext/mbstring/mbstring.c11
-rw-r--r--ext/mbstring/tests/bug77454.phpt16
3 files changed, 23 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index c2bb842df6..951154e5de 100644
--- a/NEWS
+++ b/NEWS
@@ -27,6 +27,8 @@ PHP NEWS
- Mbstring:
. Fixed bug #77428 (mb_ereg_replace() doesn't replace a substitution
variable). (Nikita)
+ . Fixed bug #77454 (mb_scrub() silently truncates after a null byte).
+ (64796c6e69 at gmail dot com)
- MySQLnd:
. Fixed bug #75684 (In mysqlnd_ext_plugin.h the plugin methods family has
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index ae8c4bef7f..0e255e98d2 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -5010,11 +5010,9 @@ PHP_FUNCTION(mb_chr)
/* }}} */
-static inline char* php_mb_scrub(const char* str, size_t str_len, const mbfl_encoding *enc)
+static inline char* php_mb_scrub(const char* str, size_t str_len, const mbfl_encoding *enc, size_t *ret_len)
{
- size_t ret_len;
-
- return php_mb_convert_encoding_ex(str, str_len, enc, enc, &ret_len);
+ return php_mb_convert_encoding_ex(str, str_len, enc, enc, ret_len);
}
@@ -5027,6 +5025,7 @@ PHP_FUNCTION(mb_scrub)
char *enc_name = NULL;
size_t enc_name_len;
char *ret;
+ size_t ret_len;
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STRING(str, str_len)
@@ -5039,13 +5038,13 @@ PHP_FUNCTION(mb_scrub)
RETURN_FALSE;
}
- ret = php_mb_scrub(str, str_len, enc);
+ ret = php_mb_scrub(str, str_len, enc, &ret_len);
if (ret == NULL) {
RETURN_FALSE;
}
- RETVAL_STRING(ret);
+ RETVAL_STRINGL(ret, ret_len);
efree(ret);
}
/* }}} */
diff --git a/ext/mbstring/tests/bug77454.phpt b/ext/mbstring/tests/bug77454.phpt
new file mode 100644
index 0000000000..b64452c79b
--- /dev/null
+++ b/ext/mbstring/tests/bug77454.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #77454: mb_scrub() silently truncates after a null byte
+--FILE--
+<?php
+$str = "before\0after";
+function test($str, $enc) {
+ echo str_replace("\0", '\0', mb_scrub($str, $enc)), "\n";
+}
+test($str, 'latin1');
+test($str, 'utf-8');
+test($str, 'ascii');
+?>
+--EXPECT--
+before\0after
+before\0after
+before\0after