]> granicus.if.org Git - php/commitdiff
Avoid double copying and string length recalculation
authorDmitry Stogov <dmitry@zend.com>
Tue, 6 Mar 2018 18:19:18 +0000 (21:19 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 6 Mar 2018 18:19:18 +0000 (21:19 +0300)
ext/hash/hash_md.c
ext/hash/hash_sha.c
ext/standard/link.c
ext/standard/md5.c
ext/standard/sha1.c

index 09b4df1f99dec1b680ae8f49941ace843e3a75ad..f5166be42d241cbfc49bf9973c99cea12c1cbc33 100644 (file)
@@ -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);
        }
 }
 /* }}} */
index 24c2d9fb365a5316c14d7f04ce7621768d8c8591..368176ea95898154fc37b0f9daa1f3a264600ca5 100644 (file)
@@ -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);
        }
 }
 /* }}} */
index 71af20c878f7dca297172c06d79cb67b9ecddd66..3138c463af6cdb73c9c6b52dcae313e701ba37ea 100644 (file)
@@ -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);
 }
 /* }}} */
 
index 68503781a69307f64d8593796a527bbc6c9aba8b..23e856ef610d9c2bd078a157104ad17a28dbca31 100644 (file)
@@ -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);
        }
 }
 /* }}} */
index 1866c1d4f022abcfcaed20b254a230b2309adcb9..fa390d9ea0cfcb962a488736731a33d92382d797 100644 (file)
@@ -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);
        }
 }
 /* }}} */