summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sapi/thttpd/thttpd.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/sapi/thttpd/thttpd.c b/sapi/thttpd/thttpd.c
index 8d6ec9d885..a99526adc4 100644
--- a/sapi/thttpd/thttpd.c
+++ b/sapi/thttpd/thttpd.c
@@ -24,6 +24,8 @@
#include "php_variables.h"
#include "version.h"
+#include "ext/standard/php_smart_str.h"
+
#include <sys/uio.h>
typedef struct {
@@ -257,30 +259,24 @@ static void thttpd_module_main(TLS_D SLS_DC)
static void thttpd_request_ctor(TLS_D SLS_DC)
{
- char *cp;
- size_t cp_len;
char buf[1024];
int offset;
size_t filename_len;
size_t cwd_len;
-
+ smart_str s = {0};
SG(request_info).query_string = TG(hc)->query?strdup(TG(hc)->query):NULL;
- filename_len = strlen(TG(hc)->expnfilename);
- cwd_len = strlen(TG(hc)->hs->cwd);
-
- cp_len = cwd_len + filename_len;
- cp = (char *) malloc(cp_len + 1);
- /* cwd always ends in "/", so this is safe */
- memcpy(cp, TG(hc)->hs->cwd, cwd_len);
- memcpy(cp + cwd_len, TG(hc)->expnfilename, filename_len);
- cp[cp_len] = '\0';
-
- SG(request_info).path_translated = cp;
+ smart_str_appends_ex(&s, TG(hc)->hs->cwd, 1);
+ smart_str_appends_ex(&s, TG(hc)->expnfilename, 1);
+ smart_str_0(&s);
+ SG(request_info).path_translated = s.c;
- snprintf(buf, 1023, "/%s", TG(hc)->origfilename);
- SG(request_info).request_uri = strdup(buf);
+ s.c = NULL;
+ smart_str_appendc_ex(&s, '/', 1);
+ smart_str_appends_ex(&s, TG(hc)->origfilename, 1);
+ smart_str_0(&s);
+ SG(request_info).request_uri = s.c;
SG(request_info).request_method = httpd_method_str(TG(hc)->method);
SG(sapi_headers).http_response_code = 200;
SG(request_info).content_type = TG(hc)->contenttype;