. 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)
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;
}
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);
}
/* }}} */
--- /dev/null
+--TEST--
+Bug #75317 (UConverter::setDestinationEncoding changes source instead of destinatination)
+--SKIPIF--
+<?php
+if (!extension_loaded('intl')) die('skip intl extension is not available');
+?>
+--FILE--
+<?php
+$utf8 = UConverter::getAliases('utf-8')[0];
+$utf16 = UConverter::getAliases('utf-16')[0];
+$utf32 = UConverter::getAliases('utf-32')[0];
+$latin1 = UConverter::getAliases('latin1')[0];
+
+function printResult($actual, $expected) {
+ var_dump($actual === $expected ? true : "expected: $expected, actual: $actual");
+}
+
+// test default values
+$c = new UConverter();
+printResult($c->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