]> granicus.if.org Git - php/commitdiff
Test is affected by mbstring
authorMarcus Boerger <helly@php.net>
Thu, 14 Nov 2002 21:43:49 +0000 (21:43 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 14 Nov 2002 21:43:49 +0000 (21:43 +0000)
ext/exif/exif.c
ext/exif/tests/exif003.phpt

index 136d069b302e207d2d37e89ade3bc515a380df2b..fbefedb91bb4221be030305b62be0fe1f4cd5d36 100644 (file)
@@ -2549,6 +2549,7 @@ static int exif_process_string(char **result, char *value, size_t byte_count TSR
 static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoPtr, char **pszEncoding, char *szValuePtr, int ByteCount TSRMLS_DC)
 {
        int   a;
+       char  *decode;
 
 #ifdef HAVE_MBSTRING
        size_t len;;
@@ -2562,11 +2563,23 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
                        szValuePtr = szValuePtr+8;
                        ByteCount -= 8;
 #ifdef HAVE_MBSTRING
-                       if (ImageInfo->motorola_intel) {
-                               *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_be, &len TSRMLS_CC);
+                       /* First try to detect BOM: ZERO WIDTH NOBREAK SPACE (FEFF 16) 
+                        * since we have no encoding support for the BOM yet we skip that.
+                        */
+                       if (!memcmp(szValuePtr, "\xFE\xFF", 2)) {
+                               decode = "UCS-2BE";
+                               szValuePtr = szValuePtr+2;
+                               ByteCount -= 2;
+                       } else if (!memcmp(szValuePtr, "\xFF\xFE", 2)) {
+                               decode = "UCS-2LE";
+                               szValuePtr = szValuePtr+2;
+                               ByteCount -= 2;
+                       } else if (ImageInfo->motorola_intel) {
+                               decode = ImageInfo->decode_unicode_be;
                        } else {
-                               *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &len TSRMLS_CC);
+                               decode = ImageInfo->decode_unicode_le;
                        }
+                       *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, decode, &len TSRMLS_CC);
                        return len;
 #else
                        return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
index 310fdf5f5bc88217b0580885d6739dcb651260ba..d61864e90983cbf2d674608f84714bc3769942cc 100644 (file)
@@ -1,10 +1,13 @@
 --TEST--
 Check for exif_read_data, Unicode user comment
 --SKIPIF--
-<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+<?php 
+       if (!extension_loaded('exif')) die('skip exif extension not available');
+       if (!extension_loaded('mbstring')) die('skip mbstring extension not available');
+?>
 --INI--
-output_handler = 
-zlib.output_compression = Off
+output_handler=
+zlib.output_compression=0
 exif.decode_unicode_motorola=UCS-2BE
 exif.encode_unicode=ISO-8859-15
 --FILE--