]> granicus.if.org Git - php/commitdiff
MFB (zend_execute_API.c v1.331.2.20.2.13): "Avoid strcpy() & strcat()"
authorMatt Wilmas <mattwil@php.net>
Thu, 19 Mar 2009 18:32:45 +0000 (18:32 +0000)
committerMatt Wilmas <mattwil@php.net>
Thu, 19 Mar 2009 18:32:45 +0000 (18:32 +0000)
Removed extra space from eval string, and unnecessary variable

Zend/zend_execute.h
Zend/zend_execute_API.c

index e33ec45485d633fb5e92a135ed8a52b12859764d..e451a09d50e61de3ff8be1295768399d185e7f54 100644 (file)
@@ -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);
index ec1f9327b3b8d7ecde75ce9679ae4cff12af7eba..4338d1f1d8a987e9f77e041811f5415d90981594 100644 (file)
@@ -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;