]> granicus.if.org Git - php/commitdiff
Fix bug #76249 - fail on invalid sequences
authorStanislav Malyshev <stas@php.net>
Mon, 23 Apr 2018 04:26:06 +0000 (21:26 -0700)
committerStanislav Malyshev <stas@php.net>
Mon, 23 Apr 2018 04:26:39 +0000 (21:26 -0700)
ext/iconv/iconv.c
ext/iconv/tests/bug76249.phpt [new file with mode: 0644]

index 69dd8c1cf7a4e9182bab62aad6f69f72d11628b2..fca5331541a76c321fcc719202cafae333c72a58 100644 (file)
@@ -2672,6 +2672,9 @@ static int php_iconv_stream_filter_append_bucket(
                                                                tcnt = 0;
                                                                break;
                                                        }
+                                               } else {
+                                                   php_error_docref(NULL, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): invalid multibyte sequence", self->from_charset, self->to_charset);
+                                                   goto out_failure;
                                                }
                                                break;
 
diff --git a/ext/iconv/tests/bug76249.phpt b/ext/iconv/tests/bug76249.phpt
new file mode 100644 (file)
index 0000000..5a9d8f1
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Bug #76249 (stream filter convert.iconv leads to infinite loop on invalid sequence)
+--SKIPIF--
+<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
+--FILE--
+<?php
+$fh = fopen('php://memory', 'rw');
+fwrite($fh, "abc");
+rewind($fh);
+stream_filter_append($fh, 'convert.iconv.ucs-2/utf8//IGNORE', STREAM_FILTER_READ, []);
+echo stream_get_contents($fh);
+?>
+DONE
+--EXPECTF--
+Warning: stream_get_contents(): iconv stream filter ("ucs-2"=>"utf8//IGNORE"): invalid multibyte sequence in %sbug76249.php on line %d
+ć…˘DONE