]> granicus.if.org Git - php/commitdiff
remove (large) static buffers for header names and request uri
authorUwe Schindler <thetaphi@php.net>
Tue, 6 Mar 2007 18:15:04 +0000 (18:15 +0000)
committerUwe Schindler <thetaphi@php.net>
Tue, 6 Mar 2007 18:15:04 +0000 (18:15 +0000)
sapi/nsapi/nsapi.c

index c3cf204318cb87c86a15220c62f244fc353633d0..65604569e5460822df1279dcacc932c43a836f25 100644 (file)
@@ -585,7 +585,7 @@ static void sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_D
        register size_t i;
        int pos;
        char *value,*p;
-       char buf[2048];
+       char buf[32];
        struct pb_entry *entry;
 
        for (i = 0; i < nsapi_reqpb_size; i++) {
@@ -599,19 +599,22 @@ static void sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_D
                entry=rc->rq->headers->ht[i];
                while (entry) {
                        if (strcasecmp(entry->param->name, "content-length")==0 || strcasecmp(entry->param->name, "content-type")==0) {
-                               strlcpy(buf, entry->param->name, sizeof(buf));
+                               value=estrdup(entry->param->name);
                                pos = 0;
                        } else {
-                               slprintf(buf, sizeof(buf), "HTTP_%s", entry->param->name);
+                               spprintf(&value, 0, "HTTP_%s", entry->param->name);
                                pos = 5;
                        }
-                       for(p = buf + pos; *p; p++) {
-                               *p = toupper(*p);
-                               if (*p < 'A' || *p > 'Z') {
-                                       *p = '_';
+                       if (value) {
+                               for(p = value + pos; *p; p++) {
+                                       *p = toupper(*p);
+                                       if (*p < 'A' || *p > 'Z') {
+                                               *p = '_';
+                                       }
                                }
+                               php_register_variable(value, entry->param->value, track_vars_array TSRMLS_CC);
+                               efree(value);
                        }
-                       php_register_variable(buf, entry->param->value, track_vars_array TSRMLS_CC);
                        entry=entry->next;
                }
        }
@@ -666,22 +669,27 @@ static void sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_D
        /* Create full Request-URI & Script-Name */
        if (SG(request_info).request_uri) {
                if (SG(request_info).query_string) {
-                       slprintf(buf, sizeof(buf), "%s?%s", SG(request_info).request_uri, SG(request_info).query_string);
+                       spprintf(&value, 0, "%s?%s", SG(request_info).request_uri, SG(request_info).query_string);
+                       if (value) {
+                               php_register_variable("REQUEST_URI", value, track_vars_array TSRMLS_CC);
+                               efree(value);
+                       }
                } else {
-                       strlcpy(buf, SG(request_info).request_uri, sizeof(buf));
+                       php_register_variable("REQUEST_URI", SG(request_info).request_uri, track_vars_array TSRMLS_CC);
                }
-               php_register_variable("REQUEST_URI", buf, track_vars_array TSRMLS_CC);
 
-               strlcpy(buf, SG(request_info).request_uri, sizeof(buf));
-               if (rc->path_info) {
-                       pos = strlen(SG(request_info).request_uri) - strlen(rc->path_info);
-                       if (pos>=0 && pos<sizeof(buf)) {
-                               buf[pos] = '\0';
-                       } else {
-                               buf[0]='\0';
+               if (value = nsapi_strdup(SG(request_info).request_uri)) {
+                       if (rc->path_info) {
+                               pos = strlen(SG(request_info).request_uri) - strlen(rc->path_info);
+                               if (pos>=0) {
+                                       value[pos] = '\0';
+                               } else {
+                                       value[0]='\0';
+                               }
                        }
+                       php_register_variable("SCRIPT_NAME", value, track_vars_array TSRMLS_CC);
+                       nsapi_free(value);
                }
-               php_register_variable("SCRIPT_NAME", buf, track_vars_array TSRMLS_CC);
        }
        php_register_variable("SCRIPT_FILENAME", SG(request_info).path_translated, track_vars_array TSRMLS_CC);