From: Andrei Zmievski Date: Wed, 17 Aug 2005 17:39:04 +0000 (+0000) Subject: Fix bin2hex() to work on binary data and return strings of correct type. X-Git-Tag: PRE_NEW_OCI8_EXTENSION~185 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=202bb697fd69d55888d1aaa78a8669d17538a07f;p=php Fix bin2hex() to work on binary data and return strings of correct type. --- diff --git a/ext/standard/string.c b/ext/standard/string.c index 9beab12123..f554b9d4df 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -185,22 +185,28 @@ PHP_MSHUTDOWN_FUNCTION(localeconv) Converts the binary representation of data to hex */ PHP_FUNCTION(bin2hex) { - zval **data; + unsigned char *data; + int data_len; char *result; size_t newlen; - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &data) == FAILURE) { - WRONG_PARAM_COUNT; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "y", &data, &data_len) == FAILURE) { + return; } - convert_to_string_ex(data); - result = php_bin2hex(Z_STRVAL_PP(data), Z_STRLEN_PP(data), &newlen); + result = php_bin2hex(data, data_len, &newlen); if (!result) { RETURN_FALSE; } - RETURN_STRINGL(result, newlen, 0); + if (UG(unicode)) { + UChar *u_temp = zend_ascii_to_unicode(result, newlen+1 ZEND_FILE_LINE_CC); + efree(result); + RETVAL_UNICODEL(u_temp, newlen, 0); + } else { + RETURN_STRINGL(result, newlen, 0); + } } /* }}} */