]> granicus.if.org Git - php/commitdiff
Fixed multibyte related issues
authorDmitry Stogov <dmitry@php.net>
Mon, 14 Mar 2011 16:00:59 +0000 (16:00 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 14 Mar 2011 16:00:59 +0000 (16:00 +0000)
Zend/tests/multibyte/multibyte_encoding_002.phpt
Zend/zend_language_scanner.l
ext/exif/exif.c
ext/mbstring/libmbfl/filters/mbfilter_ascii.c
ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
ext/mbstring/libmbfl/filters/mbfilter_cp850.c
ext/mbstring/libmbfl/filters/mbfilter_cp866.c
ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c
ext/mbstring/mb_gpc.c
ext/mbstring/mbstring.c
ext/mbstring/tests/mb_encoding_aliases.phpt

index f5e13a9b35ff0e9aa954a937f0d3c4ad1ed90a13..6e1ad80c9f6ab25028193764c5e34bf23230273f 100755 (executable)
@@ -11,7 +11,7 @@ if (!extension_loaded("mbstring")) {
 ?>
 --INI--
 zend.multibyte=1
-zend.internal_encoding=iso-8859-1
+mbstring.internal_encoding=iso-8859-1
 --FILE--
 <?php
 print "Hello World\n";
index 8b7df2bbf72f62916aa90009935308abbf80fff5..196cc71f310e1b3ce4bf9d8726a1ca19529ea841 100644 (file)
@@ -346,9 +346,7 @@ static const zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)
 
        if (script_encoding) {
                /* remove BOM */
-               script = (unsigned char*)emalloc(LANG_SCNG(script_org_size)+1-bom_size);
-               memcpy(script, LANG_SCNG(script_org)+bom_size, LANG_SCNG(script_org_size)+1-bom_size);
-               LANG_SCNG(script_org) = script;
+               LANG_SCNG(script_org) += bom_size;
                LANG_SCNG(script_org_size) -= bom_size;
 
                return script_encoding;
index 13137da838088462f55b7017303208ca95461817..d6ad8add32235cc1c9e015dbf3a63b994b3be322 100644 (file)
@@ -2664,13 +2664,13 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
                                decode = ImageInfo->decode_unicode_le;
                        }
                        if (zend_multibyte_encoding_converter(
-                                       pszInfoPtr, 
+                                       (unsigned char**)pszInfoPtr, 
                                        &len, 
-                                       szValuePtr,
+                                       (unsigned char*)szValuePtr,
                                        ByteCount,
-                                       ImageInfo->encode_unicode,
-                                       decode
-                                       TSRMLS_CC) != 0) {
+                                       zend_multibyte_fetch_encoding(ImageInfo->encode_unicode TSRMLS_CC),
+                                       zend_multibyte_fetch_encoding(decode TSRMLS_CC)
+                                       TSRMLS_CC) < 0) {
                                len = exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
                        }
                        return len;
@@ -2684,13 +2684,13 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
                        szValuePtr = szValuePtr+8;
                        ByteCount -= 8;
                        if (zend_multibyte_encoding_converter(
-                                       pszInfoPtr, 
+                                       (unsigned char**)pszInfoPtr, 
                                        &len, 
-                                       szValuePtr,
+                                       (unsigned char*)szValuePtr,
                                        ByteCount,
-                                       ImageInfo->encode_jis,
-                                       ImageInfo->motorola_intel ? ImageInfo->decode_jis_be : ImageInfo->decode_jis_le
-                                       TSRMLS_CC) != 0) {
+                                       zend_multibyte_fetch_encoding(ImageInfo->encode_jis TSRMLS_CC),
+                                       zend_multibyte_fetch_encoding(ImageInfo->motorola_intel ? ImageInfo->decode_jis_be : ImageInfo->decode_jis_le TSRMLS_CC)
+                                       TSRMLS_CC) < 0) {
                                len = exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
                        }
                        return len;
@@ -2723,13 +2723,13 @@ static int exif_process_unicode(image_info_type *ImageInfo, xp_field_type *xp_fi
 
        /* Copy the comment */
        if (zend_multibyte_encoding_converter(
-                       &xp_field->value, 
+                       (unsigned char**)&xp_field->value, 
                        &xp_field->size, 
-                       szValuePtr,
+                       (unsigned char*)szValuePtr,
                        ByteCount,
-                       ImageInfo->encode_unicode,
-                       ImageInfo->motorola_intel ? ImageInfo->decode_unicode_be : ImageInfo->decode_unicode_le
-                       TSRMLS_CC) != 0) {
+                       zend_multibyte_fetch_encoding(ImageInfo->encode_unicode TSRMLS_CC),
+                       zend_multibyte_fetch_encoding(ImageInfo->motorola_intel ? ImageInfo->decode_unicode_be : ImageInfo->decode_unicode_le TSRMLS_CC)
+                       TSRMLS_CC) < 0) {
                xp_field->size = exif_process_string_raw(&xp_field->value, szValuePtr, ByteCount);
        }
        return xp_field->size;
index 34366db6c021adcabc8b1d6a84959dbf8761bb0b..77871fb96d022dd9a35b7e122efa9c9ef0edcd49 100644 (file)
@@ -37,7 +37,7 @@
 
 static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter);
 
-static const char *mbfl_encoding_ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "cp367", "csASCII", NULL};
+static const char *mbfl_encoding_ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL};
 
 const mbfl_encoding mbfl_encoding_ascii = {
        mbfl_no_encoding_ascii,
index 148d825559a6efebbba809be7613faa192b8e62a..96a8758879b0d68955a623cea85fbd02419cc16f 100644 (file)
@@ -462,7 +462,7 @@ mbfl_filt_conv_wchar_jis_ms(int c, mbfl_convert_filter *filter)
                        s = 0x224c;
                }
        }
-       if (s <= 0 || s >= 0x8080 && s < 0x10000) {
+       if (s <= 0 || (s >= 0x8080 && s < 0x10000)) {
                int i;
                s = -1;
 
@@ -693,7 +693,7 @@ mbfl_filt_conv_wchar_cp50221(int c, mbfl_convert_filter *filter)
                        s = 0x224c;
                }
        }
-       if (s <= 0 || s >= 0x8080 && s < 0x10000) {
+       if (s <= 0 || (s >= 0x8080 && s < 0x10000)) {
                int i;
                s = -1;
 
@@ -841,7 +841,7 @@ mbfl_filt_conv_wchar_cp50222(int c, mbfl_convert_filter *filter)
                        s = 0x224c;
                }
        }
-       if (s <= 0 || s >= 0x8080 && s < 0x10000) {
+       if (s <= 0 || (s >= 0x8080 && s < 0x10000)) {
                int i;
                s = -1;
 
index 5388c048b1ba30dbf935361c5f822e06cd0cc7da..9e4696a5a9f5534593e3ad78f1efd4afdfff1b2c 100644 (file)
@@ -33,7 +33,7 @@
 
 static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter);
 
-static const char *mbfl_encoding_cp850_aliases[] = {"CP850", "CP-850", "IBM-850", NULL};
+static const char *mbfl_encoding_cp850_aliases[] = {"CP850", "CP-850", "IBM850", "IBM-850", NULL};
 
 const mbfl_encoding mbfl_encoding_cp850 = {
        mbfl_no_encoding_cp850,
index 7725d7a266fe3adcb76f3f3703884ae8ac2daac1..22e109fe5b7815bb96070d47c3197d313e9a2583 100644 (file)
@@ -37,7 +37,7 @@
 
 static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter);
 
-static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM-866", NULL};
+static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM866", "IBM-866", NULL};
 
 const mbfl_encoding mbfl_encoding_cp866 = {
        mbfl_no_encoding_cp866,
index 6d93fa35297c43be2b830578eea39da465d8ef1c..7509ef1a6a1f523a85483faeb93a304277b4b3c3 100644 (file)
@@ -218,7 +218,7 @@ mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc)
        const unsigned char *p;
 
        len = 0;
-       p = psrc;
+       p = (const unsigned char*)psrc;
        while (*p) {
                p++;
                len++;
@@ -235,7 +235,7 @@ mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc)
                device->buffer = tmp;
        }
 
-       p = psrc;
+       p = (const unsigned char*)psrc;
        w = &device->buffer[device->pos];
        device->pos += len;
        while (len > 0) {
index dcdb60030ff3b01a83f82282abe9a3c848d6e5c7..041227d15dbafa8a6d3e5ad2dd0ffa3367a77f49 100644 (file)
@@ -282,7 +282,7 @@ const mbfl_encoding *_php_mb_encoding_handler_ex(const php_mb_encoding_handler_i
                        if (info->report_errors) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect encoding");
                        }
-                       from_encoding = mbfl_no_encoding_pass;
+                       from_encoding = &mbfl_encoding_pass;
                }
        }
 
index 2d56bd8de5f1ce060a65cee46fd76f58ac115bc8..0417fafffa270c4adeb15b8e610223e828da7b58 100644 (file)
@@ -2958,7 +2958,7 @@ MBSTRING_API char * php_mb_convert_encoding(const char *input, size_t length, co
                                string.no_encoding = from_encoding->no_encoding;
                        } else {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect character encoding");
-                               from_encoding = mbfl_no_encoding_pass;
+                               from_encoding = &mbfl_encoding_pass;
                                to_encoding = from_encoding;
                                string.no_encoding = from_encoding->no_encoding;
                        }
@@ -3496,7 +3496,7 @@ PHP_FUNCTION(mb_convert_variables)
                break;
        }
        if (elistsz <= 0) {
-               from_encoding = mbfl_no_encoding_pass;
+               from_encoding = &mbfl_encoding_pass;
        } else if (elistsz == 1) {
                from_encoding = *elist;
        } else {
@@ -3565,7 +3565,7 @@ detect_end:
 
                if (!from_encoding) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect encoding");
-                       from_encoding = mbfl_no_encoding_pass;
+                       from_encoding = &mbfl_encoding_pass;
                }
        }
        if (elist != NULL) {
@@ -3573,7 +3573,7 @@ detect_end:
        }
        /* create converter */
        convd = NULL;
-       if (from_encoding != mbfl_no_encoding_pass) {
+       if (from_encoding != &mbfl_encoding_pass) {
                convd = mbfl_buffer_converter_new2(from_encoding, to_encoding, 0);
                if (convd == NULL) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter");
@@ -4418,6 +4418,7 @@ PHP_FUNCTION(mb_get_info)
                        array_init(return_value);
                        for (i = 0; i < n; i++) {
                                add_next_index_string(return_value, (*entry)->name, 1);
+                               entry++;
                        }
                }
        } else if (!strcasecmp("substitute_character", typ)) {
@@ -4693,7 +4694,7 @@ static void php_mb_gpc_get_detect_order(const zend_encoding ***list, size_t *lis
 
 static void php_mb_gpc_set_input_encoding(const zend_encoding *encoding TSRMLS_DC) /* {{{ */
 {
-       MBSTRG(http_input_identify) = encoding;
+       MBSTRG(http_input_identify) = (const mbfl_encoding*)encoding;
 }
 /* }}} */
 
index 2159481efe822eb271eb026b1ba691357a0406e7..8ef299425a3d5eaf61f15ee823ae46163e5ad939 100644 (file)
@@ -13,26 +13,28 @@ var_dump(mb_encoding_aliases("8bit"));
 ?>
 --EXPECTF--
 Warning: mb_encoding_aliases() expects exactly 1 parameter, 0 given in %s on line 2
-array(10) {
+array(11) {
   [0]=>
   string(14) "ANSI_X3.4-1968"
   [1]=>
   string(14) "ANSI_X3.4-1986"
   [2]=>
-  string(6) "IBM367"
+  string(7) "IBM-367"
   [3]=>
-  string(9) "ISO646-US"
+  string(6) "IBM367"
   [4]=>
-  string(16) "ISO_646.irv:1991"
+  string(9) "ISO646-US"
   [5]=>
-  string(8) "US-ASCII"
+  string(16) "ISO_646.irv:1991"
   [6]=>
-  string(5) "cp367"
+  string(8) "US-ASCII"
   [7]=>
-  string(7) "csASCII"
+  string(5) "cp367"
   [8]=>
-  string(8) "iso-ir-6"
+  string(7) "csASCII"
   [9]=>
+  string(8) "iso-ir-6"
+  [10]=>
   string(2) "us"
 }
 array(0) {