From: Matt Wilmas Date: Thu, 19 Mar 2009 18:32:45 +0000 (+0000) Subject: MFB (zend_execute_API.c v1.331.2.20.2.13): "Avoid strcpy() & strcat()" X-Git-Tag: php-5.4.0alpha1~191^2~4094 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b7c73cf1dd68e7dda5bdf1177a1c5263b7271690;p=php MFB (zend_execute_API.c v1.331.2.20.2.13): "Avoid strcpy() & strcat()" Removed extra space from eval string, and unnecessary variable --- diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index e33ec45485..e451a09d50 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -54,7 +54,6 @@ typedef union _temp_variable { BEGIN_EXTERN_C() ZEND_API extern UChar u_main[sizeof("main")]; ZEND_API extern UChar u_return[sizeof("return ")]; -ZEND_API extern UChar u_semicolon[sizeof(" ;")]; ZEND_API extern UChar u_doublecolon[sizeof("::")]; ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index ec1f9327b3..4338d1f1d8 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -56,14 +56,12 @@ static int timeout_thread_initialized=0; UChar u_main[sizeof("main")]; UChar u_return[sizeof("return ")]; -UChar u_semicolon[sizeof(" ;")]; -UChar u_doublecolon[sizeof(" ;")]; +UChar u_doublecolon[sizeof("::")]; void init_unicode_strings(void) { u_charsToUChars("main", u_main, sizeof("main")); u_charsToUChars("return ", u_return, sizeof("return ")); - u_charsToUChars(" ;", u_semicolon, sizeof(" ;")); u_charsToUChars("::", u_doublecolon, sizeof("::")); } @@ -1235,11 +1233,13 @@ ZEND_API int zend_u_eval_string(zend_uchar type, zstr string, zval *retval_ptr, UChar *str = string.u; if (retval_ptr) { - Z_USTRLEN(pv) = u_strlen(str) + sizeof("return ;") - 1; + int l = u_strlen(str); + Z_USTRLEN(pv) = l + sizeof("return ;") - 1; Z_USTRVAL(pv) = eumalloc(Z_USTRLEN(pv) + 1); - u_strcpy(Z_USTRVAL(pv), u_return); - u_strcat(Z_USTRVAL(pv), str); - u_strcat(Z_USTRVAL(pv), u_semicolon); + u_memcpy(Z_USTRVAL(pv), u_return, sizeof("return ") - 1); + u_memcpy(Z_USTRVAL(pv) + sizeof("return ") - 1, str, l); + Z_USTRVAL(pv)[Z_USTRLEN(pv) - 1] = 0x3B /*';'*/; + Z_USTRVAL(pv)[Z_USTRLEN(pv)] = 0; } else { Z_USTRLEN(pv) = u_strlen(str); Z_USTRVAL(pv) = str; @@ -1248,11 +1248,13 @@ ZEND_API int zend_u_eval_string(zend_uchar type, zstr string, zval *retval_ptr, char *str = string.s; if (retval_ptr) { - Z_STRLEN(pv) = strlen(str)+sizeof("return ;") - 1; + int l = strlen(str); + Z_STRLEN(pv) = l + sizeof("return ;") - 1; Z_STRVAL(pv) = emalloc(Z_STRLEN(pv) + 1); - strcpy(Z_STRVAL(pv), "return "); - strcat(Z_STRVAL(pv), str); - strcat(Z_STRVAL(pv), " ;"); + memcpy(Z_STRVAL(pv), "return ", sizeof("return ") - 1); + memcpy(Z_STRVAL(pv) + sizeof("return ") - 1, str, l); + Z_STRVAL(pv)[Z_STRLEN(pv) - 1] = ';'; + Z_STRVAL(pv)[Z_STRLEN(pv)] = '\0'; } else { Z_STRLEN(pv) = strlen(str); Z_STRVAL(pv) = str;