From 4d75504d4f62c32e9c902a1e0517c7fd2eab5d08 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 6 Mar 2018 21:19:18 +0300 Subject: [PATCH] Avoid double copying and string length recalculation --- ext/hash/hash_md.c | 11 ++++------- ext/hash/hash_sha.c | 11 ++++------- ext/standard/link.c | 2 +- ext/standard/md5.c | 11 ++++------- ext/standard/sha1.c | 11 ++++------- 5 files changed, 17 insertions(+), 29 deletions(-) diff --git a/ext/hash/hash_md.c b/ext/hash/hash_md.c index 09b4df1f99..f5166be42d 100644 --- a/ext/hash/hash_md.c +++ b/ext/hash/hash_md.c @@ -111,7 +111,6 @@ PHP_NAMED_FUNCTION(php_if_md5) char *arg; size_t arg_len; zend_bool raw_output = 0; - char md5str[33]; PHP_MD5_CTX context; unsigned char digest[16]; @@ -119,15 +118,14 @@ PHP_NAMED_FUNCTION(php_if_md5) return; } - md5str[0] = '\0'; PHP_MD5Init(&context); PHP_MD5Update(&context, arg, arg_len); PHP_MD5Final(digest, &context); if (raw_output) { RETURN_STRINGL(digest, 16); } else { - make_digest(md5str, digest); - RETVAL_STRING(md5str); + RETVAL_NEW_STR(zend_string_alloc(32, 0)); + make_digest(Z_STRVAL_P(return_value), digest); } } @@ -140,7 +138,6 @@ PHP_NAMED_FUNCTION(php_if_md5_file) char *arg; size_t arg_len; zend_bool raw_output = 0; - char md5str[33]; unsigned char buf[1024]; unsigned char digest[16]; PHP_MD5_CTX context; @@ -173,8 +170,8 @@ PHP_NAMED_FUNCTION(php_if_md5_file) if (raw_output) { RETURN_STRINGL(digest, 16); } else { - make_digest(md5str, digest); - RETVAL_STRING(md5str); + RETVAL_NEW_STR(zend_string_alloc(32, 0)); + make_digest(Z_STRVAL_P(return_value), digest); } } /* }}} */ diff --git a/ext/hash/hash_sha.c b/ext/hash/hash_sha.c index 24c2d9fb36..368176ea95 100644 --- a/ext/hash/hash_sha.c +++ b/ext/hash/hash_sha.c @@ -92,7 +92,6 @@ PHP_FUNCTION(sha1) char *arg; size_t arg_len; zend_bool raw_output = 0; - char sha1str[41]; PHP_SHA1_CTX context; unsigned char digest[20]; @@ -100,15 +99,14 @@ PHP_FUNCTION(sha1) return; } - sha1str[0] = '\0'; PHP_SHA1Init(&context); PHP_SHA1Update(&context, arg, arg_len); PHP_SHA1Final(digest, &context); if (raw_output) { RETURN_STRINGL(digest, 20); } else { - make_sha1_digest(sha1str, digest); - RETVAL_STRING(sha1str); + RETVAL_NEW_STR(zend_string_alloc(40, 0)); + make_sha1_digest(Z_STRVAL_P(return_value), digest); } } @@ -122,7 +120,6 @@ PHP_FUNCTION(sha1_file) char *arg; size_t arg_len; zend_bool raw_output = 0; - char sha1str[41]; unsigned char buf[1024]; unsigned char digest[20]; PHP_SHA1_CTX context; @@ -155,8 +152,8 @@ PHP_FUNCTION(sha1_file) if (raw_output) { RETURN_STRINGL(digest, 20); } else { - make_sha1_digest(sha1str, digest); - RETVAL_STRING(sha1str); + RETVAL_NEW_STR(zend_string_alloc(40, 0)); + make_sha1_digest(Z_STRVAL_P(return_value), digest); } } /* }}} */ diff --git a/ext/standard/link.c b/ext/standard/link.c index 71af20c878..3138c463af 100644 --- a/ext/standard/link.c +++ b/ext/standard/link.c @@ -76,7 +76,7 @@ PHP_FUNCTION(readlink) /* Append NULL to the end of the string */ buff[ret] = '\0'; - RETURN_STRING(buff); + RETURN_STRINGL(buff, ret); } /* }}} */ diff --git a/ext/standard/md5.c b/ext/standard/md5.c index 68503781a6..23e856ef61 100644 --- a/ext/standard/md5.c +++ b/ext/standard/md5.c @@ -48,7 +48,6 @@ PHP_NAMED_FUNCTION(php_if_md5) { zend_string *arg; zend_bool raw_output = 0; - char md5str[33]; PHP_MD5_CTX context; unsigned char digest[16]; @@ -58,15 +57,14 @@ PHP_NAMED_FUNCTION(php_if_md5) Z_PARAM_BOOL(raw_output) ZEND_PARSE_PARAMETERS_END(); - md5str[0] = '\0'; PHP_MD5Init(&context); PHP_MD5Update(&context, ZSTR_VAL(arg), ZSTR_LEN(arg)); PHP_MD5Final(digest, &context); if (raw_output) { RETURN_STRINGL((char *) digest, 16); } else { - make_digest_ex(md5str, digest, 16); - RETVAL_STRING(md5str); + RETVAL_NEW_STR(zend_string_alloc(32, 0)); + make_digest_ex(Z_STRVAL_P(return_value), digest, 16); } } @@ -79,7 +77,6 @@ PHP_NAMED_FUNCTION(php_if_md5_file) char *arg; size_t arg_len; zend_bool raw_output = 0; - char md5str[33]; unsigned char buf[1024]; unsigned char digest[16]; PHP_MD5_CTX context; @@ -118,8 +115,8 @@ PHP_NAMED_FUNCTION(php_if_md5_file) if (raw_output) { RETURN_STRINGL((char *) digest, 16); } else { - make_digest_ex(md5str, digest, 16); - RETVAL_STRING(md5str); + RETVAL_NEW_STR(zend_string_alloc(32, 0)); + make_digest_ex(Z_STRVAL_P(return_value), digest, 16); } } /* }}} */ diff --git a/ext/standard/sha1.c b/ext/standard/sha1.c index 1866c1d4f0..fa390d9ea0 100644 --- a/ext/standard/sha1.c +++ b/ext/standard/sha1.c @@ -36,7 +36,6 @@ PHP_FUNCTION(sha1) { zend_string *arg; zend_bool raw_output = 0; - char sha1str[41]; PHP_SHA1_CTX context; unsigned char digest[20]; @@ -46,15 +45,14 @@ PHP_FUNCTION(sha1) Z_PARAM_BOOL(raw_output) ZEND_PARSE_PARAMETERS_END(); - sha1str[0] = '\0'; PHP_SHA1Init(&context); PHP_SHA1Update(&context, (unsigned char *) ZSTR_VAL(arg), ZSTR_LEN(arg)); PHP_SHA1Final(digest, &context); if (raw_output) { RETURN_STRINGL((char *) digest, 20); } else { - make_digest_ex(sha1str, digest, 20); - RETVAL_STRING(sha1str); + RETVAL_NEW_STR(zend_string_alloc(40, 0)); + make_digest_ex(Z_STRVAL_P(return_value), digest, 20); } } @@ -69,7 +67,6 @@ PHP_FUNCTION(sha1_file) char *arg; size_t arg_len; zend_bool raw_output = 0; - char sha1str[41]; unsigned char buf[1024]; unsigned char digest[20]; PHP_SHA1_CTX context; @@ -100,8 +97,8 @@ PHP_FUNCTION(sha1_file) if (raw_output) { RETURN_STRINGL((char *) digest, 20); } else { - make_digest_ex(sha1str, digest, 20); - RETVAL_STRING(sha1str); + RETVAL_NEW_STR(zend_string_alloc(40, 0)); + make_digest_ex(Z_STRVAL_P(return_value), digest, 20); } } /* }}} */ -- 2.50.1