summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.NEW-OUTPUT-API2
-rw-r--r--Zend/zend_compile.c5
-rw-r--r--ext/odbc/php_odbc.c2
-rw-r--r--ext/pgsql/pgsql.c36
-rw-r--r--ext/pgsql/tests/bug65119.phpt40
-rw-r--r--ext/session/mod_files.c5
-rw-r--r--ext/session/session.c45
-rw-r--r--ext/session/tests/bug61470.phpt6
-rw-r--r--ext/session/tests/bug68063.phpt20
-rw-r--r--ext/session/tests/session_basic3.phpt18
-rw-r--r--ext/session/tests/session_regenerate_id_basic.phpt4
-rw-r--r--ext/session/tests/session_regenerate_id_error.phpt44
-rw-r--r--ext/session/tests/session_regenerate_id_variation1.phpt4
-rw-r--r--ext/standard/browscap.c2
-rw-r--r--ext/standard/head.c2
-rw-r--r--main/main.c6
-rw-r--r--main/php_scandir.c2
-rw-r--r--tests/basic/bug67988.phpt27
-rw-r--r--tests/basic/encoding.phpt14
19 files changed, 220 insertions, 64 deletions
diff --git a/README.NEW-OUTPUT-API b/README.NEW-OUTPUT-API
index 7d9cc1016f..c43649a837 100644
--- a/README.NEW-OUTPUT-API
+++ b/README.NEW-OUTPUT-API
@@ -34,7 +34,7 @@ API adjustment to the old output control code:
php_output_handler_started(handler_name, handler_name_len TSRMLS_CC);
Flushing one output buffer:
- // php_ob_end_buffer(1, 1 TSRMLS_CC);
+ // php_end_ob_buffer(1, 1 TSRMLS_CC);
php_output_flush(TSRMLS_C);
Flushing all output buffers:
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 4720b4ff59..cffed9c7d4 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1029,7 +1029,7 @@ void zend_do_early_binding(void) /* {{{ */
zend_class_entry *ce;
parent_name = CT_CONSTANT(fetch_class_opline->op2);
- if (((ce = zend_lookup_class(Z_STR_P(parent_name))) == NULL) ||
+ if (((ce = zend_lookup_class_ex(Z_STR_P(parent_name), parent_name + 1, 0)) == NULL) ||
((CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_CLASSES) &&
(ce->type == ZEND_INTERNAL_CLASS))) {
if (CG(compiler_options) & ZEND_COMPILE_DELAYED_BINDING) {
@@ -1083,7 +1083,8 @@ ZEND_API void zend_do_delayed_early_binding(const zend_op_array *op_array) /* {{
CG(in_compilation) = 1;
while (opline_num != (uint32_t)-1) {
- if ((ce = zend_lookup_class(Z_STR_P(RT_CONSTANT(op_array, op_array->opcodes[opline_num-1].op2)))) != NULL) {
+ zval *parent_name = RT_CONSTANT(op_array, op_array->opcodes[opline_num-1].op2);
+ if ((ce = zend_lookup_class_ex(Z_STR_P(parent_name), parent_name + 1, 0)) != NULL) {
do_bind_inherited_class(op_array, &op_array->opcodes[opline_num], EG(class_table), ce, 0);
}
opline_num = op_array->opcodes[opline_num].result.opline_num;
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
index cd4964346f..692128c59f 100644
--- a/ext/odbc/php_odbc.c
+++ b/ext/odbc/php_odbc.c
@@ -1358,7 +1358,7 @@ PHP_FUNCTION(odbc_execute)
rc = SQLBindParameter(result->stmt, (SQLUSMALLINT)i, SQL_PARAM_INPUT,
ctype, sqltype, precision, scale,
- (void *)params[i-1].fp, 0,
+ (void *)(intptr_t)params[i-1].fp, 0,
&params[i-1].vallen);
} else {
#ifdef HAVE_DBMAKER
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 225ff65c30..d414025ab7 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -4151,7 +4151,7 @@ PHP_FUNCTION(pg_copy_to)
PHP_FUNCTION(pg_copy_from)
{
zval *pgsql_link = NULL, *pg_rows;
- zval *tmp;
+ zval *value;
char *table_name, *pg_delim = NULL, *pg_null_as = NULL;
size_t table_name_len, pg_delim_len, pg_null_as_len;
int pg_null_as_free = 0;
@@ -4200,39 +4200,49 @@ PHP_FUNCTION(pg_copy_from)
int command_failed = 0;
PQclear(pgsql_result);
#if HAVE_PQPUTCOPYDATA
- ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), tmp) {
- convert_to_string_ex(tmp);
- query = (char *)emalloc(Z_STRLEN_P(tmp) + 2);
- strlcpy(query, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp) + 2);
- if(Z_STRLEN_P(tmp) > 0 && *(query + Z_STRLEN_P(tmp) - 1) != '\n') {
- strlcat(query, "\n", Z_STRLEN_P(tmp) + 2);
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
+ zval tmp;
+ ZVAL_DUP(&tmp, value);
+ convert_to_string_ex(&tmp);
+ query = (char *)emalloc(Z_STRLEN(tmp) + 2);
+ strlcpy(query, Z_STRVAL(tmp), Z_STRLEN(tmp) + 2);
+ if(Z_STRLEN(tmp) > 0 && *(query + Z_STRLEN(tmp) - 1) != '\n') {
+ strlcat(query, "\n", Z_STRLEN(tmp) + 2);
}
if (PQputCopyData(pgsql, query, (int)strlen(query)) != 1) {
efree(query);
+ zval_dtor(&tmp);
PHP_PQ_ERROR("copy failed: %s", pgsql);
RETURN_FALSE;
}
efree(query);
+ zval_dtor(&tmp);
} ZEND_HASH_FOREACH_END();
+
if (PQputCopyEnd(pgsql, NULL) != 1) {
PHP_PQ_ERROR("putcopyend failed: %s", pgsql);
RETURN_FALSE;
}
#else
- ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), tmp) {
- convert_to_string_ex(tmp);
- query = (char *)emalloc(Z_STRLEN_P(tmp) + 2);
- strlcpy(query, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp) + 2);
- if(Z_STRLEN_P(tmp) > 0 && *(query + Z_STRLEN_P(tmp) - 1) != '\n') {
- strlcat(query, "\n", Z_STRLEN_P(tmp) + 2);
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
+ zval tmp;
+ ZVAL_DUP(&tmp, value);
+ convert_to_string_ex(&tmp);
+ query = (char *)emalloc(Z_STRLEN(tmp) + 2);
+ strlcpy(query, Z_STRVAL(tmp), Z_STRLEN(tmp) + 2);
+ if(Z_STRLEN(tmp) > 0 && *(query + Z_STRLEN(tmp) - 1) != '\n') {
+ strlcat(query, "\n", Z_STRLEN(tmp) + 2);
}
if (PQputline(pgsql, query)==EOF) {
efree(query);
+ zval_dtor(&tmp);
PHP_PQ_ERROR("copy failed: %s", pgsql);
RETURN_FALSE;
}
efree(query);
+ zval_dtor(&tmp);
} ZEND_HASH_FOREACH_END();
+
if (PQputline(pgsql, "\\.\n") == EOF) {
PHP_PQ_ERROR("putline failed: %s", pgsql);
RETURN_FALSE;
diff --git a/ext/pgsql/tests/bug65119.phpt b/ext/pgsql/tests/bug65119.phpt
new file mode 100644
index 0000000000..c02ff28f06
--- /dev/null
+++ b/ext/pgsql/tests/bug65119.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #65119 (pg_copy_from() modifies input array variable)
+--SKIPIF--
+<?php
+include("skipif.inc");
+?>
+--FILE--
+<?php
+include 'config.inc';
+
+function test(Array $values, $conn_str) {
+ $connection = pg_pconnect($conn_str, PGSQL_CONNECT_FORCE_NEW);
+ pg_query("begin");
+ pg_query("CREATE TABLE bug65119 (i INTEGER)");
+ pg_copy_from($connection, "bug65119", $values, "\t", "NULL");
+ pg_query("rollback");
+}
+
+$values = Array(1,2,3);
+var_dump($values);
+test($values, $conn_str);
+var_dump($values);
+?>
+--EXPECT--
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index 561d216adf..2db5159d91 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -159,6 +159,7 @@ static void ps_files_open(ps_files *data, const char *key)
#if !defined(O_NOFOLLOW) || !defined(PHP_WIN32)
struct stat sbuf;
#endif
+ int ret;
if (data->fd < 0 || !data->lastkey || strcmp(key, data->lastkey)) {
if (data->lastkey) {
@@ -201,7 +202,9 @@ static void ps_files_open(ps_files *data, const char *key)
return;
}
#endif
- flock(data->fd, LOCK_EX);
+ do {
+ ret = flock(data->fd, LOCK_EX);
+ } while (ret == -1 && errno == EINTR);
#ifdef F_SETFD
# ifndef FD_CLOEXEC
diff --git a/ext/session/session.c b/ext/session/session.c
index 010de352b9..c6f5f5230f 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -2010,6 +2010,7 @@ static PHP_FUNCTION(session_id)
static PHP_FUNCTION(session_regenerate_id)
{
zend_bool del_ses = 0;
+ zend_string *data = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &del_ses) == FAILURE) {
return;
@@ -2020,26 +2021,31 @@ static PHP_FUNCTION(session_regenerate_id)
RETURN_FALSE;
}
- if (PS(session_status) == php_session_active) {
- if (PS(id)) {
- if (del_ses && PS(mod)->s_destroy(&PS(mod_data), PS(id)) == FAILURE) {
- php_error_docref(NULL, E_WARNING, "Session object destruction failed");
- RETURN_FALSE;
- }
- zend_string_release(PS(id));
- PS(id) = NULL;
- }
+ if (PS(session_status) != php_session_active) {
+ php_error_docref(NULL, E_WARNING, "Cannot regenerate session id - session is not active");
+ RETURN_FALSE;
+ }
- PS(id) = PS(mod)->s_create_sid(&PS(mod_data));
- if (PS(id)) {
- PS(send_cookie) = 1;
- php_session_reset_id();
- RETURN_TRUE;
- } else {
- PS(id) = STR_EMPTY_ALLOC();
+ /* Keep current session data */
+ data = php_session_encode();
+
+ if (del_ses && PS(mod)->s_destroy(&PS(mod_data), PS(id)) == FAILURE) {
+ php_error_docref(NULL, E_WARNING, "Session object destruction failed");
+ }
+ php_rshutdown_session_globals();
+ php_rinit_session_globals();
+
+ php_session_initialize();
+ /* Restore session data */
+ if (data) {
+ if (PS(session_vars)) {
+ zend_string_release(PS(session_vars));
+ PS(session_vars) = NULL;
}
+ php_session_decode(data);
+ zend_string_release(data);
}
- RETURN_FALSE;
+ RETURN_TRUE;
}
/* }}} */
@@ -2195,6 +2201,11 @@ static PHP_FUNCTION(session_start)
RETURN_FALSE;
}
+ if (PS(id) && !(PS(id)->len)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot start session with empty session ID");
+ RETURN_FALSE;
+ }
+
/* set options */
if (options) {
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(options), num_idx, str_idx, value) {
diff --git a/ext/session/tests/bug61470.phpt b/ext/session/tests/bug61470.phpt
index 8be1a540b5..d8b4c2014f 100644
--- a/ext/session/tests/bug61470.phpt
+++ b/ext/session/tests/bug61470.phpt
@@ -2,8 +2,6 @@
Bug #61470 (session_regenerate_id() does not create session file)
--SKIPIF--
<?php include('skipif.inc'); ?>
---XFAIL--
-Semantecs of create id seems changed. Will be fixed soon.
--INI--
--FILE--
<?php
@@ -24,6 +22,6 @@ var_dump(is_file($file2));
unlink($file1);
unlink($file2);
--EXPECT--
-bool(true);
-bool(true);
+bool(true)
+bool(true)
diff --git a/ext/session/tests/bug68063.phpt b/ext/session/tests/bug68063.phpt
new file mode 100644
index 0000000000..d3da470d06
--- /dev/null
+++ b/ext/session/tests/bug68063.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #68063 (Empty session IDs do still start sessions)
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+--FILE--
+<?php
+// Could also be set with a cookie like "PHPSESSID=; path=/"
+session_id('');
+
+// Will still start the session and return true
+var_dump(session_start());
+
+// Returns an empty string
+var_dump(session_id());
+?>
+--EXPECTF--
+Warning: session_start(): Cannot start session with empty session ID in %s on line %d
+bool(false)
+string(0) ""
diff --git a/ext/session/tests/session_basic3.phpt b/ext/session/tests/session_basic3.phpt
index 08e3aae295..49c22032bd 100644
--- a/ext/session/tests/session_basic3.phpt
+++ b/ext/session/tests/session_basic3.phpt
@@ -180,15 +180,15 @@ ob_end_flush();
*** Testing basic session functionality : variation3 use_trans_sid ***
*** Test trans sid ***
-<a href="/?PHPSESSID=testid&PHPSESSID=testid">test</a>
-<a href="/?PHPSESSID=testid&PHPSESSID=testid#bar">test</a>
-<a href="/?foo&PHPSESSID=testid&PHPSESSID=testid">test</a>
-<a href="/?foo&PHPSESSID=testid&PHPSESSID=testid#bar">test</a>
-<a href="/?foo=var&PHPSESSID=testid&PHPSESSID=testid">test</a>
-<a href="/?foo=var&PHPSESSID=testid&PHPSESSID=testid#bar">test</a>
-<a href="file.php?PHPSESSID=testid&PHPSESSID=testid">test</a>
-<a href="file.php?foo&PHPSESSID=testid&PHPSESSID=testid">test</a>
-<a href="file.php?foo=var&PHPSESSID=testid&PHPSESSID=testid">test</a>
+<a href="/?PHPSESSID=testid">test</a>
+<a href="/?PHPSESSID=testid#bar">test</a>
+<a href="/?foo&PHPSESSID=testid">test</a>
+<a href="/?foo&PHPSESSID=testid#bar">test</a>
+<a href="/?foo=var&PHPSESSID=testid">test</a>
+<a href="/?foo=var&PHPSESSID=testid#bar">test</a>
+<a href="file.php?PHPSESSID=testid">test</a>
+<a href="file.php?foo&PHPSESSID=testid">test</a>
+<a href="file.php?foo=var&PHPSESSID=testid">test</a>
<a href="http://php.net">test</a>
<a href="http://php.net/">test</a>
<a href="http://php.net/#bar">test</a>
diff --git a/ext/session/tests/session_regenerate_id_basic.phpt b/ext/session/tests/session_regenerate_id_basic.phpt
index 910620a66f..cdf2bb1f2b 100644
--- a/ext/session/tests/session_regenerate_id_basic.phpt
+++ b/ext/session/tests/session_regenerate_id_basic.phpt
@@ -31,12 +31,16 @@ ob_end_flush();
--EXPECTF--
*** Testing session_regenerate_id() : basic functionality ***
string(0) ""
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
string(0) ""
bool(true)
bool(true)
string(%d) "%s"
bool(true)
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
string(0) ""
Done
diff --git a/ext/session/tests/session_regenerate_id_error.phpt b/ext/session/tests/session_regenerate_id_error.phpt
index 9e119f17fb..9c94d8564b 100644
--- a/ext/session/tests/session_regenerate_id_error.phpt
+++ b/ext/session/tests/session_regenerate_id_error.phpt
@@ -96,63 +96,103 @@ ob_end_flush();
*** Testing session_regenerate_id() : error functionality ***
-- Iteration 1 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 2 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 3 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 4 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 5 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 6 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 7 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 8 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 9 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 10 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 11 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 12 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 13 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 14 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 15 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 16 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 17 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 18 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 19 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 20 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 21 --
@@ -161,9 +201,13 @@ Warning: session_regenerate_id() expects parameter 1 to be boolean, object given
NULL
-- Iteration 22 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 23 --
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
-- Iteration 24 --
diff --git a/ext/session/tests/session_regenerate_id_variation1.phpt b/ext/session/tests/session_regenerate_id_variation1.phpt
index 95d4a77c8e..ca0ef35b10 100644
--- a/ext/session/tests/session_regenerate_id_variation1.phpt
+++ b/ext/session/tests/session_regenerate_id_variation1.phpt
@@ -31,12 +31,16 @@ ob_end_flush();
--EXPECTF--
*** Testing session_regenerate_id() : variation ***
string(0) ""
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
string(0) ""
bool(true)
bool(true)
string(%d) "%s"
bool(true)
+
+Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in %s on line %d
bool(false)
string(0) ""
Done
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index 1e48c3c5a0..353e7cdccb 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -312,7 +312,7 @@ PHP_MINIT_FUNCTION(browscap) /* {{{ */
#ifdef ZTS
ts_allocate_id(&browscap_globals_id, sizeof(browser_data),
- browscap_globals_ctor, NULL);
+ (ts_allocate_ctor) browscap_globals_ctor, NULL);
#endif
/* ctor call not really needed for non-ZTS */
diff --git a/ext/standard/head.c b/ext/standard/head.c
index 7219737310..a8daf1e4ef 100644
--- a/ext/standard/head.c
+++ b/ext/standard/head.c
@@ -281,7 +281,7 @@ PHP_FUNCTION(headers_list)
return;
}
- if (!&SG(sapi_headers).headers) {
+ if (!&SG(sapi_headers).headers.count) {
RETURN_FALSE;
}
array_init(return_value);
diff --git a/main/main.c b/main/main.c
index 1312528def..d5d101ae55 100644
--- a/main/main.c
+++ b/main/main.c
@@ -423,8 +423,6 @@ static PHP_INI_MH(OnUpdateInternalEncoding)
{
if (new_value) {
OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
- } else {
- PG(internal_encoding) = SG(default_charset);
}
return SUCCESS;
}
@@ -436,8 +434,6 @@ static PHP_INI_MH(OnUpdateInputEncoding)
{
if (new_value) {
OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
- } else {
- PG(input_encoding) = SG(default_charset);
}
return SUCCESS;
}
@@ -449,8 +445,6 @@ static PHP_INI_MH(OnUpdateOutputEncoding)
{
if (new_value) {
OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
- } else {
- PG(output_encoding) = SG(default_charset);
}
return SUCCESS;
}
diff --git a/main/php_scandir.c b/main/php_scandir.c
index 9f6517dbf3..67bb25696c 100644
--- a/main/php_scandir.c
+++ b/main/php_scandir.c
@@ -112,7 +112,7 @@ PHPAPI int php_scandir(const char *dirname, struct dirent **namelist[], int (*se
*namelist = vector;
if (compare) {
- qsort (*namelist, nfiles, sizeof(struct dirent *), compare);
+ qsort (*namelist, nfiles, sizeof(struct dirent *), (int (*) (const void *, const void *)) compare);
}
return nfiles;
diff --git a/tests/basic/bug67988.phpt b/tests/basic/bug67988.phpt
new file mode 100644
index 0000000000..e1d8e5d7d4
--- /dev/null
+++ b/tests/basic/bug67988.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Bug #67988 (htmlspecialchars() does not respect default_charset specified by ini_set)
+--INI--
+default_charset=UTF-8
+--FILE--
+<?php
+ini_set('default_charset', 'cp1252');
+
+var_dump(ini_get('default_charset'));
+var_dump(ini_get('internal_encoding'));
+var_dump(ini_get('input_encoding'));
+var_dump(ini_get('output_encoding'));
+
+var_dump(htmlentities("\xA3", ENT_HTML5));
+var_dump(htmlentities("\xA3", ENT_HTML5, 'cp1252'));
+
+var_dump(bin2hex(html_entity_decode("&pound;", ENT_HTML5)));
+var_dump(bin2hex(html_entity_decode("&pound;", ENT_HTML5, 'cp1252')));
+--EXPECT--
+string(6) "cp1252"
+string(0) ""
+string(0) ""
+string(0) ""
+string(7) "&pound;"
+string(7) "&pound;"
+string(2) "a3"
+string(2) "a3"
diff --git a/tests/basic/encoding.phpt b/tests/basic/encoding.phpt
index d9f7e0caad..c513cbfa79 100644
--- a/tests/basic/encoding.phpt
+++ b/tests/basic/encoding.phpt
@@ -14,14 +14,14 @@ var_dump(ini_get('input_encoding'));
var_dump(ini_get('internal_encoding'));
var_dump(ini_get('output_encoding'));
-var_dump(ini_set('input_encoding', 'ISO-8859-1'));
-var_dump(ini_set('internal_encoding', 'ISO-8859-1'));
-var_dump(ini_set('output_encoding', 'ISO-8859-1'));
+var_dump(ini_set('input_encoding', 'EUC-JP'));
+var_dump(ini_set('internal_encoding', 'EUC-JP'));
+var_dump(ini_set('output_encoding', 'EUC-JP'));
var_dump(ini_get('input_encoding'));
var_dump(ini_get('internal_encoding'));
var_dump(ini_get('output_encoding'));
---EXPECTF--
+--EXPECT--
string(5) "UTF-8"
string(0) ""
string(0) ""
@@ -34,6 +34,6 @@ string(0) ""
string(0) ""
string(0) ""
string(0) ""
-string(10) "ISO-8859-1"
-string(10) "ISO-8859-1"
-string(10) "ISO-8859-1"
+string(6) "EUC-JP"
+string(6) "EUC-JP"
+string(6) "EUC-JP"