Avoid double copying and string length recalculation

This commit is contained in:
Dmitry Stogov 2018-03-06 21:19:18 +03:00
parent a98eb1ec2c
commit 4d75504d4f
5 changed files with 17 additions and 29 deletions

View 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);
}
}
/* }}} */

View 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);
}
}
/* }}} */

View 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);
}
/* }}} */

View 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);
}
}
/* }}} */

View 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);
}
}
/* }}} */