diff options
author | Pierrick Charron <pierrick@php.net> | 2009-11-21 01:22:32 +0000 |
---|---|---|
committer | Pierrick Charron <pierrick@php.net> | 2009-11-21 01:22:32 +0000 |
commit | 121f1066857aba3e014fe105ea73dda31505e99f (patch) | |
tree | 99da97259414272edbd956e5009f2d8fcbcae049 /ext/soap/php_http.c | |
parent | 95af3404eb465dd251728ddaa0ae35ceb35c5c2c (diff) | |
download | php-git-121f1066857aba3e014fe105ea73dda31505e99f.tar.gz |
Fixed bug #50219 (soap call Segmentation fault on a redirected url).
Diffstat (limited to 'ext/soap/php_http.c')
-rw-r--r-- | ext/soap/php_http.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index dae863a4c7..0207cf7cc1 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -996,12 +996,20 @@ try_again: new_url->host = phpurl->host ? estrdup(phpurl->host) : NULL; new_url->port = phpurl->port; if (new_url->path && new_url->path[0] != '/') { - char *t = phpurl->path; - char *p = strrchr(t, '/'); - if (p) { - char *s = emalloc((p - t) + strlen(new_url->path) + 2); - strncpy(s, t, (p - t) + 1); - s[(p - t) + 1] = 0; + if (phpurl->path) { + char *t = phpurl->path; + char *p = strrchr(t, '/'); + if (p) { + char *s = emalloc((p - t) + strlen(new_url->path) + 2); + strncpy(s, t, (p - t) + 1); + s[(p - t) + 1] = 0; + strcat(s, new_url->path); + efree(new_url->path); + new_url->path = s; + } + } else { + char *s = emalloc(strlen(new_url->path) + 2); + s[0] = '/'; s[1] = 0; strcat(s, new_url->path); efree(new_url->path); new_url->path = s; |