diff options
author | Xinchen Hui <laruence@php.net> | 2013-11-08 15:32:28 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2013-11-08 15:32:28 +0800 |
commit | cf2626f10c92709f8db44afa15fc09ec6a9d8b0c (patch) | |
tree | a0a23a3f562ea78713dc3beec3abe43aab700bf7 | |
parent | fd3fa9b53c6bc8f34c1c8bf75141f7ee74dc8db0 (diff) | |
download | php-git-cf2626f10c92709f8db44afa15fc09ec6a9d8b0c.tar.gz |
Fixed bug #65947 (basename is no more working after fgetcsv in certain situation)
previous codes: "#define php_mblen(ptr, len) ((ptr) == NULL ? mbsinit(&BG(mblen_state)):
(int)mbrlen(ptr, len, &BG(mblen_state)))#
it use mbsinit there, seems try to initialize the mblen_state, but:
"This function does not change the state identified by ps. Typical ways
to make the state pointed by ps an initial state are:
memset (ps,0,sizeof(*ps)); // ps points to zero-valued object
"
http://www.cplusplus.com/reference/cwchar/mbsinit/?kw=mbsinit
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/standard/php_string.h | 2 | ||||
-rw-r--r-- | ext/standard/tests/strings/bug65947.phpt | 17 |
3 files changed, 22 insertions, 1 deletions
@@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2013, PHP 5.4.23 +- Core: + . Fixed bug #65947 (basename is no more working after fgetcsv in certain + situation). (Laruence) + - MySQLi: . Fixed bug #66043 (Segfault calling bind_param() on mysqli). (Laruence) diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index 65219f257a..1ce98ee07a 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -156,7 +156,7 @@ PHPAPI char *php_strerror(int errnum); # define php_mblen(ptr, len) 1 #else # if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T) -# define php_mblen(ptr, len) ((ptr) == NULL ? mbsinit(&BG(mblen_state)): (int)mbrlen(ptr, len, &BG(mblen_state))) +# define php_mblen(ptr, len) ((ptr) == NULL ? memset(&BG(mblen_state), 0, sizeof(BG(mblen_state))): (int)mbrlen(ptr, len, &BG(mblen_state))) # else # define php_mblen(ptr, len) mblen(ptr, len) # endif diff --git a/ext/standard/tests/strings/bug65947.phpt b/ext/standard/tests/strings/bug65947.phpt new file mode 100644 index 0000000000..956aa6049a --- /dev/null +++ b/ext/standard/tests/strings/bug65947.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #65947 (basename is no more working after fgetcsv in certain situation) +--SKIPIF-- +<?php if (!PHP_ZTS) { print "skip only for zts build"; } +--FILE-- +<?php +$filename = 'test.toto'; +// é in ISO-8859-1 +$csv = base64_decode('6Q=='); +$adata = str_getcsv($csv,";"); +$b2 = basename($filename); +if ($filename != $b2) + print "BUG"; +else + print "OKEY"; +--EXPECTF-- +OKEY |