diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2017-08-04 13:00:09 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2017-08-04 13:01:03 +0200 |
commit | 353f7bf461005895082c440ee6619edf7e2ec8e8 (patch) | |
tree | 7a5c8ec66c2d1b053cabc0ea1cb621dcfec9a075 | |
parent | e53162a32b011ef22c3e0210e7af334d968f227c (diff) | |
download | php-git-353f7bf461005895082c440ee6619edf7e2ec8e8.tar.gz |
Also check for invalid codepoints in mb_ord()
And return false in that case, instead of returning 0x3f...
-rw-r--r-- | ext/mbstring/mbstring.c | 16 | ||||
-rw-r--r-- | ext/mbstring/tests/mb_ord.phpt | 2 |
2 files changed, 16 insertions, 2 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 5618d7a75b..57e438429d 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -5074,7 +5074,21 @@ static inline zend_long php_mb_ord(const char* str, size_t str_len, const char* return -1; } - ret = php_mb_convert_encoding(str, str_len, "UCS-4BE", enc, &ret_len); + { + long orig_illegalchars = MBSTRG(illegalchars); + MBSTRG(illegalchars) = 0; + ret = php_mb_convert_encoding(str, str_len, "UCS-4BE", enc, &ret_len); + if (MBSTRG(illegalchars) != 0) { + if (ret) { + efree(ret); + } + MBSTRG(illegalchars) = orig_illegalchars; + return -1; + } + + MBSTRG(illegalchars) = orig_illegalchars; + } + if (ret == NULL) { return -1; } diff --git a/ext/mbstring/tests/mb_ord.phpt b/ext/mbstring/tests/mb_ord.phpt index 4bf0d0c0e4..25249dae3c 100644 --- a/ext/mbstring/tests/mb_ord.phpt +++ b/ext/mbstring/tests/mb_ord.phpt @@ -6,7 +6,7 @@ mb_ord() <?php var_dump( 0x20bb7 === mb_ord("\u{20bb7}"), - 0x3f === mb_ord("\u{d800}"), + false === mb_ord("\u{d800}"), 0x50aa === mb_ord("\x8f\xa1\xef", "EUC-JP-2004") ); |