]> granicus.if.org Git - php/commitdiff
- Fix bug #45722 (mb_check_encoding() crashes).
authorMoriyoshi Koizumi <moriyoshi@php.net>
Thu, 16 Oct 2008 01:01:05 +0000 (01:01 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Thu, 16 Oct 2008 01:01:05 +0000 (01:01 +0000)
ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
ext/mbstring/tests/bug45722.phpt [new file with mode: 0644]

index 40c24c3424e56ba389016175800e116eadd15709..6c6654a1b9ed366d6dda25fc9e84471b958638fc 100644 (file)
@@ -232,8 +232,7 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
                                mbfl_filt_conv_html_dec_flush(filter);
                                if (c=='&')
                                {
-                                       filter->status = 1;
-                                       buffer[0] = '&';
+                                       buffer[filter->status++] = '&';
                                }
                        }
                }
@@ -244,17 +243,19 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
 int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter)
 {
        int status, pos = 0;
-       char *buffer;
+       unsigned char *buffer;
+       int err = 0;
 
-       buffer = (char*)filter->opaque;
+       buffer = (unsigned char*)filter->opaque;
        status = filter->status;
+       filter->status = 0;
        /* flush fragments */
        while (status--) {
-               CK((*filter->output_function)(buffer[pos++], filter->data));
+               int e = (*filter->output_function)(buffer[pos++], filter->data);
+               if (e != 0)
+                       err = e;
        }
-       filter->status = 0;
-       /*filter->buffer = 0; of cause NOT*/
-       return 0;
+       return err;
 }
 
 
diff --git a/ext/mbstring/tests/bug45722.phpt b/ext/mbstring/tests/bug45722.phpt
new file mode 100644 (file)
index 0000000..c05a010
--- /dev/null
@@ -0,0 +1,8 @@
+--TEST--
+Bug #45722 (mb_check_encoding() crashes)
+--FILE--
+<?php
+var_dump(mb_check_encoding("&\xc2\xb7 TEST TEST TEST TEST TEST TEST", "HTML-ENTITIES"));
+?>
+--EXPECT--
+bool(false)