From 30bdcf2392ef8cc7b8b4a07b49367571ae1db286 Mon Sep 17 00:00:00 2001 From: Ondřej Surý Date: Thu, 27 Mar 2014 15:35:16 +0100 Subject: New upstream version 5.6.0~alpha3+dfsg --- ext/iconv/iconv.c | 44 +++++++++++++-- ext/iconv/php_iconv.h | 6 -- ext/iconv/tests/iconv_ini_encoding.phpt | 68 +++++++++++++++++++++++ ext/iconv/tests/iconv_set_encoding_variation.phpt | 54 +++++++++--------- 4 files changed, 134 insertions(+), 38 deletions(-) create mode 100644 ext/iconv/tests/iconv_ini_encoding.phpt (limited to 'ext/iconv') diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index ea6ac1a1f..87ad5eeaa 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -220,21 +220,55 @@ static char _generic_superset_name[] = ICONV_UCS4_ENCODING; #define GENERIC_SUPERSET_NBYTES 4 /* }}} */ -static PHP_INI_MH(OnUpdateStringIconvCharset) + +static PHP_INI_MH(OnUpdateInputEncoding) +{ + if (new_value_length >= ICONV_CSNMAXLEN) { + return FAILURE; + } + if (new_value_length) { + OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } else { + OnUpdateString(entry, PG(input_encoding), strlen(PG(input_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } + return SUCCESS; +} + + +static PHP_INI_MH(OnUpdateOutputEncoding) { if(new_value_length >= ICONV_CSNMAXLEN) { return FAILURE; } - OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + if (new_value_length) { + OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } else { + OnUpdateString(entry, PG(output_encoding), strlen(PG(output_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } return SUCCESS; } + +static PHP_INI_MH(OnUpdateInternalEncoding) +{ + if(new_value_length >= ICONV_CSNMAXLEN) { + return FAILURE; + } + if (new_value_length) { + OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } else { + OnUpdateString(entry, PG(internal_encoding), strlen(PG(internal_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + } + return SUCCESS; +} + + /* {{{ PHP_INI */ PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("iconv.input_encoding", ICONV_INPUT_ENCODING, PHP_INI_ALL, OnUpdateStringIconvCharset, input_encoding, zend_iconv_globals, iconv_globals) - STD_PHP_INI_ENTRY("iconv.output_encoding", ICONV_OUTPUT_ENCODING, PHP_INI_ALL, OnUpdateStringIconvCharset, output_encoding, zend_iconv_globals, iconv_globals) - STD_PHP_INI_ENTRY("iconv.internal_encoding", ICONV_INTERNAL_ENCODING, PHP_INI_ALL, OnUpdateStringIconvCharset, internal_encoding, zend_iconv_globals, iconv_globals) + STD_PHP_INI_ENTRY("iconv.input_encoding", "", PHP_INI_ALL, OnUpdateInputEncoding, input_encoding, zend_iconv_globals, iconv_globals) + STD_PHP_INI_ENTRY("iconv.output_encoding", "", PHP_INI_ALL, OnUpdateOutputEncoding, output_encoding, zend_iconv_globals, iconv_globals) + STD_PHP_INI_ENTRY("iconv.internal_encoding", "", PHP_INI_ALL, OnUpdateInternalEncoding, internal_encoding, zend_iconv_globals, iconv_globals) PHP_INI_END() /* }}} */ diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h index 26e3f3b2a..1389d7a99 100644 --- a/ext/iconv/php_iconv.h +++ b/ext/iconv/php_iconv.h @@ -79,15 +79,9 @@ ZEND_END_MODULE_GLOBALS(iconv) #endif #ifdef HAVE_IBM_ICONV -# define ICONV_INPUT_ENCODING "ISO8859-1" -# define ICONV_OUTPUT_ENCODING "ISO8859-1" -# define ICONV_INTERNAL_ENCODING "ISO8859-1" # define ICONV_ASCII_ENCODING "IBM-850" # define ICONV_UCS4_ENCODING "UCS-4" #else -# define ICONV_INPUT_ENCODING "ISO-8859-1" -# define ICONV_OUTPUT_ENCODING "ISO-8859-1" -# define ICONV_INTERNAL_ENCODING "ISO-8859-1" # define ICONV_ASCII_ENCODING "ASCII" # define ICONV_UCS4_ENCODING "UCS-4LE" #endif diff --git a/ext/iconv/tests/iconv_ini_encoding.phpt b/ext/iconv/tests/iconv_ini_encoding.phpt new file mode 100644 index 000000000..b9a69824e --- /dev/null +++ b/ext/iconv/tests/iconv_ini_encoding.phpt @@ -0,0 +1,68 @@ +--TEST-- +Encoding INI test +--SKIPIF-- + +--INI-- +default_charset=ISO-8859-1 +internal_encoding= +input_encoding= +output_encoding= +iconv.internal_encoding=ISO-8859-1 +iconv.http_input=ISO-8859-1 +iconv.http_output=ISO-8859-1 +--FILE-- +