iliaa                                    Thu, 19 Aug 2010 12:27:13 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=302476

Log:
Fixed bug #52599 (iconv output handler outputs incorrect content type when 
flags are used).

Bug: http://bugs.php.net/52599 (Open) iconv output handler produces 
Content-Type: text/html; charset=UTF-8//TRANSLIT
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/iconv/iconv.c
    U   php/php-src/trunk/ext/iconv/iconv.c

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2010-08-19 11:47:00 UTC (rev 302475)
+++ php/php-src/branches/PHP_5_3/NEWS   2010-08-19 12:27:13 UTC (rev 302476)
@@ -16,6 +16,8 @@
 - Fixed bug #52636 (php_mysql_fetch_hash writes long value into int).
   (Kalle, rein at basefarm dot no)
 - Fixed bug #52613 (crash in mysqlnd after hitting memory limit). (Andrey)
+- Fixed bug #52599 (iconv output handler outputs incorrect content type
+  when flags are used). (Ilia)
 - Fixed bug #52573 (SplFileObject::fscanf Segmentation fault). (Felipe)
 - Fixed bug #52546 (pdo_dblib segmentation fault when iterating MONEY values).
   (Felipe)

Modified: php/php-src/branches/PHP_5_3/ext/iconv/iconv.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/iconv/iconv.c      2010-08-19 11:47:00 UTC 
(rev 302475)
+++ php/php-src/branches/PHP_5_3/ext/iconv/iconv.c      2010-08-19 12:27:13 UTC 
(rev 302476)
@@ -2340,7 +2340,13 @@
                                ICONVG(output_encoding), 
ICONVG(internal_encoding));
                _php_iconv_show_error(err, ICONVG(output_encoding), 
ICONVG(internal_encoding) TSRMLS_CC);
                if (out_buffer != NULL) {
-                       int len = spprintf(&content_type, 0, "Content-Type:%s; 
charset=%s", mimetype, ICONVG(output_encoding));
+                       int len;
+                       char *p = strstr(ICONVG(output_encoding), "//");
+                       if (p) {
+                               len = spprintf(&content_type, 0, 
"Content-Type:%s; charset=%.*s", mimetype, (int)(p - ICONVG(output_encoding)), 
ICONVG(output_encoding));
+                       } else {
+                               len = spprintf(&content_type, 0, 
"Content-Type:%s; charset=%s", mimetype, ICONVG(output_encoding));
+                       }
                        if (content_type && sapi_add_header(content_type, len, 
0) != FAILURE) {
                                SG(sapi_headers).send_default_content_type = 0;
                        }

Modified: php/php-src/trunk/ext/iconv/iconv.c
===================================================================
--- php/php-src/trunk/ext/iconv/iconv.c 2010-08-19 11:47:00 UTC (rev 302475)
+++ php/php-src/trunk/ext/iconv/iconv.c 2010-08-19 12:27:13 UTC (rev 302476)
@@ -276,7 +276,7 @@
                return FAILURE;
        }

-       php_output_handler_alias_register(ZEND_STRL("ob_iconv_handler"), 
php_iconv_output_handler_init TSRMLS_CC);
+       php_output_handler_alias_register(ZEND_STRL("ob_iconv_handler´┐Ż"), 
php_iconv_output_handler_init TSRMLS_CC);
        php_output_handler_conflict_register(ZEND_STRL("ob_iconv_handler"), 
php_iconv_output_conflict TSRMLS_CC);

        return SUCCESS;
@@ -353,7 +353,14 @@
                }

                if (mimetype != NULL && !(output_context->op & 
PHP_OUTPUT_HANDLER_CLEAN)) {
-                       int len = spprintf(&content_type, 0, "Content-Type: 
%.*s; charset=%s", mimetype_len?mimetype_len:strlen(mimetype), mimetype, 
ICONVG(output_encoding));
+                       int len;
+                       char *p = strstr(ICONVG(output_encoding), "//");
+
+                       if (p) {
+                               len = spprintf(&content_type, 0, 
"Content-Type:%.*s; charset=%.*s", mimetype_len ? mimetype_len : (int) 
strlen(mimetype), mimetype, (int)(p - ICONVG(output_encoding)), 
ICONVG(output_encoding));
+                       } else {
+                               len = spprintf(&content_type, 0, 
"Content-Type:%.*s; charset=%s", mimetype_len ? mimetype_len : (int) 
strlen(mimetype), mimetype, ICONVG(output_encoding));
+                       }
                        if (content_type && SUCCESS == 
sapi_add_header(content_type, len, 0)) {
                                SG(sapi_headers).send_default_content_type = 0;
                                
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE, NULL TSRMLS_CC);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to