diff --git a/ext/intl/converter/converter.c b/ext/intl/converter/converter.c index 2b5cf98ae87a6..537a8e5d500e2 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 0000000000000..cbd96052643b8 --- /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