]> granicus.if.org Git - php/commitdiff
Fix assertion failure when failing to detect encoding
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 6 May 2020 20:55:03 +0000 (22:55 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 6 May 2020 20:56:01 +0000 (22:56 +0200)
Looks like prior to 7.3 this just passed the original string
through. Since 7.3 it returns false. Let's stick with that
behavior.

ext/mbstring/mbstring.c
ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt [new file with mode: 0644]

index f636d51b025353808a1c3993b99d925ccc90b5fb..a529f848091186c0271e88c036cea4aa44f70a3b 100644 (file)
@@ -2489,9 +2489,6 @@ MBSTRING_API char *php_mb_convert_encoding(const char *input, size_t length, con
        if (output_len) {
                *output_len = 0;
        }
-       if (!input) {
-               return NULL;
-       }
 
        /* pre-conversion encoding */
        ZEND_ASSERT(num_from_encodings >= 1);
@@ -2507,7 +2504,7 @@ MBSTRING_API char *php_mb_convert_encoding(const char *input, size_t length, con
                        &string, from_encodings, num_from_encodings, MBSTRG(strict_detection));
                if (!from_encoding) {
                        php_error_docref(NULL, E_WARNING, "Unable to detect character encoding");
-                       from_encoding = &mbfl_encoding_pass;
+                       return NULL;
                }
        }
 
diff --git a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt
new file mode 100644 (file)
index 0000000..961af50
--- /dev/null
@@ -0,0 +1,11 @@
+--TEST--
+mb_convert_encoding() when encoding detection fails
+--FILE--
+<?php
+
+var_dump(mb_convert_encoding("\xff", "ASCII", ["UTF-8", "UTF-16"]));
+
+?>
+--EXPECTF--
+Warning: mb_convert_encoding(): Unable to detect character encoding in %s on line %d
+bool(false)