]> granicus.if.org Git - php/commitdiff
Check for empty string in mb_ord()
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 4 Aug 2017 20:17:34 +0000 (22:17 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 4 Aug 2017 20:20:05 +0000 (22:20 +0200)
ext/mbstring/mbstring.c
ext/mbstring/tests/mb_chr_ord.phpt
ext/mbstring/tests/mb_ord.phpt

index 57e438429d8d1455764aa4d11b3feebfc9a6e32d..d2e778bff53e5558c81b52b8f098f7de5a8e8133 100644 (file)
@@ -5074,6 +5074,11 @@ static inline zend_long php_mb_ord(const char* str, size_t str_len, const char*
                return -1;
        }
 
+       if (str_len == 0) {
+               php_error_docref(NULL, E_WARNING, "Empty string");
+               return -1;
+       }
+
        {
                long orig_illegalchars = MBSTRG(illegalchars);
                MBSTRG(illegalchars) = 0;
index 613f2e7f421b49d0bd55ff67482671658ebea18a..153699b1b09682c11642855d5c10abf3fb8d2c39 100644 (file)
@@ -6,7 +6,14 @@ mb_chr() and mb_ord()
 <?php
 ini_set('internal_encoding', 'utf-8');
 for($ch = 1; $ch < 80000; $ch++) {
-       if ($ch !== mb_ord(mb_chr($ch))) echo "ERROR($ch)\n";
+       $str = mb_chr($ch);
+       if (false === $str) {
+               echo "ERROR($ch)\n";
+               continue;
+       }
+       if ($ch != mb_ord($str)) {
+               echo "REAL ERROR($ch)\n";
+       }
 }
 echo 'OK';
 --EXPECTF--
index 25249dae3c9c229a0e5dd0a23a9f4f4536e223fc..b42bd054250fe5f82de8e95a422e603957034427 100644 (file)
@@ -16,7 +16,8 @@ var_dump(
        mb_ord("\u{d800}", "pass"),
        mb_ord("\u{d800}", "jis"),
        mb_ord("\u{d800}", "cp50222"),
-       mb_ord("\u{d800}", "utf-7")
+       mb_ord("\u{d800}", "utf-7"),
+       mb_ord("")
 );
 ?>
 --EXPECTF--
@@ -33,6 +34,9 @@ Warning: mb_ord(): Unsupported encoding "jis" %s 12
 Warning: mb_ord(): Unsupported encoding "cp50222" %s 13
 
 Warning: mb_ord(): Unsupported encoding "utf-7" %s 14
+
+Warning: mb_ord(): Empty string in %s on line %d
+bool(false)
 bool(false)
 bool(false)
 bool(false)