From 80c3b078b8f4da054d95bc35b7951bb3f6987b5d Mon Sep 17 00:00:00 2001 From: Nester Date: Mon, 9 Oct 2017 14:26:44 +0000 Subject: [PATCH] Fixed #75317 - UConverter::setDestinationEncoding changes source instead of destinatination --- NEWS | 4 +++ ext/intl/converter/converter.c | 8 ++--- ext/intl/tests/bug75317.phpt | 53 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 ext/intl/tests/bug75317.phpt diff --git a/NEWS b/NEWS index 8d451c6e89..8e8f6af4bb 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,10 @@ PHP NEWS . Fixed bug #75301 (Exif extension has built in revision version). (Peter Kokot) +- intl: + . Fixed bug #75317 (UConverter::setDestinationEncoding changes source instead + of destination). (andrewnester) + - OCI8: . Fixed valgrind issue. (Tianfang Yang) diff --git a/ext/intl/converter/converter.c b/ext/intl/converter/converter.c index 2b5cf98ae8..537a8e5d50 100644 --- a/ext/intl/converter/converter.c +++ b/ext/intl/converter/converter.c @@ -411,7 +411,7 @@ static zend_bool php_converter_set_encoding(php_converter_object *objval, ZEND_BEGIN_ARG_INFO_EX(php_converter_set_encoding_arginfo, 0, ZEND_RETURN_VALUE, 1) ZEND_ARG_INFO(0, encoding) ZEND_END_ARG_INFO(); -static void php_converter_do_set_encoding(UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) { +static void php_converter_do_set_encoding(UConverter **pcnv, INTERNAL_FUNCTION_PARAMETERS) { php_converter_object *objval = CONV_GET(getThis()); char *enc; size_t enc_len; @@ -423,21 +423,21 @@ static void php_converter_do_set_encoding(UConverter *cnv, INTERNAL_FUNCTION_PAR } intl_errors_reset(&objval->error); - RETURN_BOOL(php_converter_set_encoding(objval, &(objval->src), enc, enc_len)); + RETURN_BOOL(php_converter_set_encoding(objval, pcnv, enc, enc_len)); } /* }}} */ /* {{{ proto bool UConverter::setSourceEncoding(string encoding) */ static PHP_METHOD(UConverter, setSourceEncoding) { php_converter_object *objval = CONV_GET(getThis()); - php_converter_do_set_encoding(objval->src, INTERNAL_FUNCTION_PARAM_PASSTHRU); + php_converter_do_set_encoding(&(objval->src), INTERNAL_FUNCTION_PARAM_PASSTHRU); } /* }}} */ /* {{{ proto bool UConverter::setDestinationEncoding(string encoding) */ static PHP_METHOD(UConverter, setDestinationEncoding) { php_converter_object *objval = CONV_GET(getThis()); - php_converter_do_set_encoding(objval->dest, INTERNAL_FUNCTION_PARAM_PASSTHRU); + php_converter_do_set_encoding(&(objval->dest), INTERNAL_FUNCTION_PARAM_PASSTHRU); } /* }}} */ diff --git a/ext/intl/tests/bug75317.phpt b/ext/intl/tests/bug75317.phpt new file mode 100644 index 0000000000..cbd9605264 --- /dev/null +++ b/ext/intl/tests/bug75317.phpt @@ -0,0 +1,53 @@ +--TEST-- +Bug #75317 (UConverter::setDestinationEncoding changes source instead of destinatination) +--SKIPIF-- + +--FILE-- +getDestinationEncoding(), $utf8); +printResult($c->getSourceEncoding(), $utf8); + +// test constructor args +$c = new UConverter('utf-16', 'latin1'); +printResult($c->getDestinationEncoding(), $utf16); +printResult($c->getSourceEncoding(), $latin1); + +// test setters +var_dump($c->setDestinationEncoding('utf-8')); +var_dump($c->setSourceEncoding('utf-32')); +printResult($c->getDestinationEncoding(), $utf8); +printResult($c->getSourceEncoding(), $utf32); + +// test invalid inputs dont change values +var_dump($c->setDestinationEncoding('foobar') === false); +var_dump($c->setSourceEncoding('foobar') === false); +printResult($c->getDestinationEncoding(), $utf8); +printResult($c->getSourceEncoding(), $utf32); + +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) \ No newline at end of file -- 2.40.0