]> granicus.if.org Git - php/commitdiff
- SCNG(input_filter) can be null if the script encoding is idential to
authorMoriyoshi Koizumi <moriyoshi@php.net>
Mon, 28 Jul 2008 07:01:54 +0000 (07:01 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Mon, 28 Jul 2008 07:01:54 +0000 (07:01 +0000)
  the internal encoding.

Zend/zend_language_scanner.l
ext/mbstring/tests/zend_multibyte-14.phpt [new file with mode: 0644]

index 5a0ca023f760b3ff6101250ada64bfed7bb24844..11449ad411d3ce043a55c98757be9e7cf88fb9fa 100644 (file)
@@ -448,20 +448,21 @@ ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
 {
        size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
 #ifdef ZEND_MULTIBYTE
-       size_t original_offset = offset, length = 0;
-       do {
-               unsigned char *p = NULL;
-               SCNG(input_filter)(&p, &length, SCNG(script_org), offset TSRMLS_CC);
-               if (!p) {
-                       break;
-               }
-               efree(p);
-               if (length > original_offset) {
-                       offset--;
-               } else if (length < original_offset) {
-                       offset++;
-               }
-       } while (original_offset != length);
+       if (SCNG(input_filter)) {
+               size_t original_offset = offset, length = 0; do {
+                       unsigned char *p = NULL;
+                       SCNG(input_filter)(&p, &length, SCNG(script_org), offset TSRMLS_CC);
+                       if (!p) {
+                               break;
+                       }
+                       efree(p);
+                       if (length > original_offset) {
+                               offset--;
+                       } else if (length < original_offset) {
+                               offset++;
+                       }
+               } while (original_offset != length);
+       }
 #endif
        return offset;
 }
@@ -607,7 +608,7 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
                zend_encoding *new_encoding = SCNG(script_encoding);
                zend_encoding_filter new_filter = SCNG(input_filter);
                SCNG(script_encoding) = old_encoding;
-               SCNG(input_filter) = new_filter;
+               SCNG(input_filter) = old_input_filter;
                offset = zend_get_scanned_file_offset(TSRMLS_C);
                SCNG(script_encoding) = new_encoding;
                SCNG(input_filter) = new_filter;
diff --git a/ext/mbstring/tests/zend_multibyte-14.phpt b/ext/mbstring/tests/zend_multibyte-14.phpt
new file mode 100644 (file)
index 0000000..dc968d7
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+zend multibyte (13)
+--SKIPIF--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" and
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=UTF-8
+mbstring.internal_encoding=UTF-8
+--FILE--
+<?php
+var_dump(substr(file_get_contents(__FILE__), __COMPILER_HALT_OFFSET__));
+var_dump(bin2hex("äëüáéú"));
+__halt_compiler();test
+test
+--EXPECT--
+string(10) "test
+test
+"
+string(24) "c3a4c3abc3bcc3a1c3a9c3ba"