summaryrefslogtreecommitdiff
path: root/ext/iconv
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2014-04-17 11:11:51 +0200
committerOndřej Surý <ondrej@sury.org>2014-04-17 11:11:51 +0200
commit9566c3fcaf4cfaa866ea395ee5d1a480785fef0d (patch)
treed053b8b66afe080ea2250d5fbcdfc21c243d54ab /ext/iconv
parent30bdcf2392ef8cc7b8b4a07b49367571ae1db286 (diff)
downloadphp-9566c3fcaf4cfaa866ea395ee5d1a480785fef0d.tar.gz
New upstream version 5.6.0~beta1+dfsgupstream/5.6.0_beta1+dfsg
Diffstat (limited to 'ext/iconv')
-rw-r--r--ext/iconv/iconv.c89
-rw-r--r--ext/iconv/tests/iconv_default_charset.phpt77
-rw-r--r--ext/iconv/tests/iconv_encoding_basic.phpt1
-rw-r--r--ext/iconv/tests/iconv_get_encoding_basic.phpt2
-rw-r--r--ext/iconv/tests/iconv_ini_encoding.phpt1
-rw-r--r--ext/iconv/tests/iconv_set_encoding_variation.phpt2
-rw-r--r--ext/iconv/tests/iconv_strpos_basic.phpt2
-rw-r--r--ext/iconv/tests/iconv_strpos_variation5.phpt2
-rw-r--r--ext/iconv/tests/iconv_strrpos_basic.phpt2
9 files changed, 149 insertions, 29 deletions
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 87ad5eeaa..2df759f99 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -226,11 +226,10 @@ 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);
+ if (stage & (PHP_INI_STAGE_ACTIVATE | PHP_INI_STAGE_RUNTIME)) {
+ php_error_docref("ref.iconv" TSRMLS_CC, E_DEPRECATED, "Use of iconv.input_encoding is deprecated");
}
+ OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
return SUCCESS;
}
@@ -240,11 +239,10 @@ static PHP_INI_MH(OnUpdateOutputEncoding)
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(output_encoding), strlen(PG(output_encoding))+1, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+ if (stage & (PHP_INI_STAGE_ACTIVATE | PHP_INI_STAGE_RUNTIME)) {
+ php_error_docref("ref.iconv" TSRMLS_CC, E_DEPRECATED, "Use of iconv.output_encoding is deprecated");
}
+ OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
return SUCCESS;
}
@@ -254,11 +252,10 @@ 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);
+ if (stage & (PHP_INI_STAGE_ACTIVATE | PHP_INI_STAGE_RUNTIME)) {
+ php_error_docref("ref.iconv" TSRMLS_CC, E_DEPRECATED, "Use of iconv.internal_encoding is deprecated");
}
+ OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
return SUCCESS;
}
@@ -347,6 +344,40 @@ PHP_MINFO_FUNCTION(miconv)
}
/* }}} */
+static char *get_internal_encoding(TSRMLS_D) {
+ if (ICONVG(internal_encoding) && ICONVG(internal_encoding)[0]) {
+ return ICONVG(internal_encoding);
+ } else if (PG(internal_encoding) && PG(internal_encoding)[0]) {
+ return PG(internal_encoding);
+ } else if (SG(default_charset)) {
+ return SG(default_charset);
+ }
+ return "";
+}
+
+static char *get_input_encoding(TSRMLS_D) {
+ if (ICONVG(input_encoding) && ICONVG(input_encoding)[0]) {
+ return ICONVG(input_encoding);
+ } else if (PG(input_encoding) && PG(input_encoding)[0]) {
+ return PG(input_encoding);
+ } else if (SG(default_charset)) {
+ return SG(default_charset);
+ }
+ return "";
+}
+
+static char *get_output_encoding(TSRMLS_D) {
+ if (ICONVG(output_encoding) && ICONVG(output_encoding)[0]) {
+ return ICONVG(output_encoding);
+ } else if (PG(output_encoding) && PG(output_encoding)[0]) {
+ return PG(output_encoding);
+ } else if (SG(default_charset)) {
+ return SG(default_charset);
+ }
+ return "";
+}
+
+
static int php_iconv_output_conflict(const char *handler_name, size_t handler_name_len TSRMLS_DC)
{
if (php_output_get_level(TSRMLS_C)) {
@@ -388,12 +419,12 @@ static int php_iconv_output_handler(void **nothing, php_output_context *output_c
if (mimetype != NULL && !(output_context->op & PHP_OUTPUT_HANDLER_CLEAN)) {
int len;
- char *p = strstr(ICONVG(output_encoding), "//");
+ char *p = strstr(get_output_encoding(TSRMLS_C), "//");
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));
+ len = spprintf(&content_type, 0, "Content-Type:%.*s; charset=%.*s", mimetype_len ? mimetype_len : (int) strlen(mimetype), mimetype, (int)(p - get_output_encoding(TSRMLS_C)), get_output_encoding(TSRMLS_C));
} else {
- len = spprintf(&content_type, 0, "Content-Type:%.*s; charset=%s", mimetype_len ? mimetype_len : (int) strlen(mimetype), mimetype, ICONVG(output_encoding));
+ len = spprintf(&content_type, 0, "Content-Type:%.*s; charset=%s", mimetype_len ? mimetype_len : (int) strlen(mimetype), mimetype, get_output_encoding(TSRMLS_C));
}
if (content_type && SUCCESS == sapi_add_header(content_type, len, 0)) {
SG(sapi_headers).send_default_content_type = 0;
@@ -404,7 +435,7 @@ static int php_iconv_output_handler(void **nothing, php_output_context *output_c
if (output_context->in.used) {
output_context->out.free = 1;
- _php_iconv_show_error(php_iconv_string(output_context->in.data, output_context->in.used, &output_context->out.data, &output_context->out.used, ICONVG(output_encoding), ICONVG(internal_encoding)), ICONVG(output_encoding), ICONVG(internal_encoding) TSRMLS_CC);
+ _php_iconv_show_error(php_iconv_string(output_context->in.data, output_context->in.used, &output_context->out.data, &output_context->out.used, get_output_encoding(TSRMLS_C), get_internal_encoding(TSRMLS_C)), get_output_encoding(TSRMLS_C), get_internal_encoding(TSRMLS_C) TSRMLS_CC);
}
return SUCCESS;
@@ -1991,7 +2022,7 @@ static void _php_iconv_show_error(php_iconv_err_t err, const char *out_charset,
Returns the character count of str */
PHP_FUNCTION(iconv_strlen)
{
- char *charset = ICONVG(internal_encoding);
+ char *charset = get_internal_encoding(TSRMLS_C);
int charset_len = 0;
char *str;
int str_len;
@@ -2024,7 +2055,7 @@ PHP_FUNCTION(iconv_strlen)
Returns specified part of a string */
PHP_FUNCTION(iconv_substr)
{
- char *charset = ICONVG(internal_encoding);
+ char *charset = get_internal_encoding(TSRMLS_C);
int charset_len = 0;
char *str;
int str_len;
@@ -2064,7 +2095,7 @@ PHP_FUNCTION(iconv_substr)
Finds position of first occurrence of needle within part of haystack beginning with offset */
PHP_FUNCTION(iconv_strpos)
{
- char *charset = ICONVG(internal_encoding);
+ char *charset = get_internal_encoding(TSRMLS_C);
int charset_len = 0;
char *haystk;
int haystk_len;
@@ -2112,7 +2143,7 @@ PHP_FUNCTION(iconv_strpos)
Finds position of last occurrence of needle within part of haystack beginning with offset */
PHP_FUNCTION(iconv_strrpos)
{
- char *charset = ICONVG(internal_encoding);
+ char *charset = get_internal_encoding(TSRMLS_C);
int charset_len = 0;
char *haystk;
int haystk_len;
@@ -2163,7 +2194,7 @@ PHP_FUNCTION(iconv_mime_encode)
smart_str retval = {0};
php_iconv_err_t err;
- const char *in_charset = ICONVG(internal_encoding);
+ const char *in_charset = get_internal_encoding(TSRMLS_C);
const char *out_charset = in_charset;
long line_len = 76;
const char *lfchars = "\r\n";
@@ -2276,7 +2307,7 @@ PHP_FUNCTION(iconv_mime_decode)
{
char *encoded_str;
int encoded_str_len;
- char *charset = ICONVG(internal_encoding);
+ char *charset = get_internal_encoding(TSRMLS_C);
int charset_len = 0;
long mode = 0;
@@ -2317,7 +2348,7 @@ PHP_FUNCTION(iconv_mime_decode_headers)
{
const char *encoded_str;
int encoded_str_len;
- char *charset = ICONVG(internal_encoding);
+ char *charset = get_internal_encoding(TSRMLS_C);
int charset_len = 0;
long mode = 0;
@@ -2485,15 +2516,15 @@ PHP_FUNCTION(iconv_get_encoding)
if (!strcasecmp("all", type)) {
array_init(return_value);
- add_assoc_string(return_value, "input_encoding", ICONVG(input_encoding), 1);
- add_assoc_string(return_value, "output_encoding", ICONVG(output_encoding), 1);
- add_assoc_string(return_value, "internal_encoding", ICONVG(internal_encoding), 1);
+ add_assoc_string(return_value, "input_encoding", get_input_encoding(TSRMLS_C), 1);
+ add_assoc_string(return_value, "output_encoding", get_output_encoding(TSRMLS_C), 1);
+ add_assoc_string(return_value, "internal_encoding", get_internal_encoding(TSRMLS_C), 1);
} else if (!strcasecmp("input_encoding", type)) {
- RETVAL_STRING(ICONVG(input_encoding), 1);
+ RETVAL_STRING(get_input_encoding(TSRMLS_C), 1);
} else if (!strcasecmp("output_encoding", type)) {
- RETVAL_STRING(ICONVG(output_encoding), 1);
+ RETVAL_STRING(get_output_encoding(TSRMLS_C), 1);
} else if (!strcasecmp("internal_encoding", type)) {
- RETVAL_STRING(ICONVG(internal_encoding), 1);
+ RETVAL_STRING(get_internal_encoding(TSRMLS_C), 1);
} else {
RETURN_FALSE;
}
diff --git a/ext/iconv/tests/iconv_default_charset.phpt b/ext/iconv/tests/iconv_default_charset.phpt
new file mode 100644
index 000000000..ebfc7e6ee
--- /dev/null
+++ b/ext/iconv/tests/iconv_default_charset.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Test default_charset handling
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_get_encoding') or die("skip iconv_get_encoding() is not available in this build");
+?>
+--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
+default_charset=UTF-8
+internal_encoding=
+input_encoding=
+output_encoding=
+iconv.internal_encoding=
+iconv.input_encoding=
+iconv.output_encoding=
+--FILE--
+<?php
+echo "*** Testing default_charset handling ***\n";
+
+echo "--- Get php.ini values ---\n";
+var_dump(ini_get('default_charset'),
+ ini_get('internal_encoding'),
+ ini_get('input_encoding'),
+ ini_get('output_encoding'),
+ ini_get('iconv.internal_encoding'),
+ ini_get('iconv.input_encoding'),
+ ini_get('iconv.output_encoding'));
+
+echo "\n--- Altering encodings ---\n";
+var_dump(ini_set('default_charset', 'ISO-8859-1'));
+
+echo "\n--- results of alterations ---\n";
+var_dump(ini_get('default_charset'),
+ ini_get('internal_encoding'),
+ ini_get('input_encoding'),
+ ini_get('output_encoding'),
+ ini_get('iconv.internal_encoding'),
+ ini_get('iconv.input_encoding'),
+ ini_get('iconv.output_encoding'));
+
+/*
+echo "\n--- Altering encodings ---\n";
+var_dump(ini_set('default_charset', 'ISO-8859-1'),
+ ini_set('internal_encoding'),
+ ini_set('input_encoding'),
+ ini_set('output_encoding'),
+ ini_set('iconv.internal_encoding'),
+ ini_set('iconv.input_encoding'),
+ ini_set('iconv.output_encoding'));
+*/
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing default_charset handling ***
+--- Get php.ini values ---
+string(5) "UTF-8"
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+
+--- Altering encodings ---
+string(5) "UTF-8"
+
+--- results of alterations ---
+string(10) "ISO-8859-1"
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+Done
diff --git a/ext/iconv/tests/iconv_encoding_basic.phpt b/ext/iconv/tests/iconv_encoding_basic.phpt
index 746858161..35314f1e6 100644
--- a/ext/iconv/tests/iconv_encoding_basic.phpt
+++ b/ext/iconv/tests/iconv_encoding_basic.phpt
@@ -6,6 +6,7 @@ extension_loaded('iconv') or die('skip');
function_exists('iconv_get_encoding') or die("skip iconv_get_encoding() is not available in this build");
?>
--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
iconv.input_encoding=ISO-8859-1
iconv.internal_encoding=ISO-8859-1
iconv.output_encoding=ISO-8859-1
diff --git a/ext/iconv/tests/iconv_get_encoding_basic.phpt b/ext/iconv/tests/iconv_get_encoding_basic.phpt
index 83efd1586..84ee932e1 100644
--- a/ext/iconv/tests/iconv_get_encoding_basic.phpt
+++ b/ext/iconv/tests/iconv_get_encoding_basic.phpt
@@ -5,6 +5,8 @@ Oystein Rose <orose@redpill-linpro.com>
#PHPTestFest2009 Norway 2009-06-09 \o/
--SKIPIF--
<?php if (!extension_loaded("iconv")) { echo 'skip extension not available'; } ?>
+--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
--FILE--
<?php
diff --git a/ext/iconv/tests/iconv_ini_encoding.phpt b/ext/iconv/tests/iconv_ini_encoding.phpt
index b9a69824e..2d02b1c55 100644
--- a/ext/iconv/tests/iconv_ini_encoding.phpt
+++ b/ext/iconv/tests/iconv_ini_encoding.phpt
@@ -3,6 +3,7 @@ Encoding INI test
--SKIPIF--
<?php extension_loaded('iconv') or die('skip mbstring not available'); ?>
--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
default_charset=ISO-8859-1
internal_encoding=
input_encoding=
diff --git a/ext/iconv/tests/iconv_set_encoding_variation.phpt b/ext/iconv/tests/iconv_set_encoding_variation.phpt
index e239c6c18..4e097569f 100644
--- a/ext/iconv/tests/iconv_set_encoding_variation.phpt
+++ b/ext/iconv/tests/iconv_set_encoding_variation.phpt
@@ -5,6 +5,8 @@ Test iconv_set_encoding() function : error functionality
extension_loaded('iconv') or die('skip');
function_exists('iconv_set_encoding') or die("skip iconv_set_encoding() is not available in this build");
?>
+--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
--FILE--
<?php
/* Prototype : bool iconv_set_encoding(string type, string charset)
diff --git a/ext/iconv/tests/iconv_strpos_basic.phpt b/ext/iconv/tests/iconv_strpos_basic.phpt
index 1604465f1..25f8f1b1f 100644
--- a/ext/iconv/tests/iconv_strpos_basic.phpt
+++ b/ext/iconv/tests/iconv_strpos_basic.phpt
@@ -5,6 +5,8 @@ Test iconv_strpos() function : basic functionality
extension_loaded('iconv') or die('skip');
function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
?>
+--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
--FILE--
<?php
/* Prototype : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
diff --git a/ext/iconv/tests/iconv_strpos_variation5.phpt b/ext/iconv/tests/iconv_strpos_variation5.phpt
index 57a7a90ee..3db063421 100644
--- a/ext/iconv/tests/iconv_strpos_variation5.phpt
+++ b/ext/iconv/tests/iconv_strpos_variation5.phpt
@@ -5,6 +5,8 @@ Test iconv_strpos() function : usage variations - Pass different integers as $of
extension_loaded('iconv') or die('skip');
function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
?>
+--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
--FILE--
<?php
/* Prototype : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
diff --git a/ext/iconv/tests/iconv_strrpos_basic.phpt b/ext/iconv/tests/iconv_strrpos_basic.phpt
index e27568105..3d34a23f1 100644
--- a/ext/iconv/tests/iconv_strrpos_basic.phpt
+++ b/ext/iconv/tests/iconv_strrpos_basic.phpt
@@ -5,6 +5,8 @@ Test iconv_strrpos() function : basic functionality
extension_loaded('iconv') or die('skip');
function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
?>
+--INI--
+error_reporting=E_ALL & ~E_DEPRECATED
--FILE--
<?php
/* Prototype : proto int iconv_strrpos(string haystack, string needle [, string charset])