From: Fabian Keil Date: Sat, 9 Dec 2006 13:33:15 +0000 (+0000) Subject: Added some sanity checks for get_last_url(). X-Git-Tag: v_3_0_7~463 X-Git-Url: http://www.privoxy.org/gitweb/%22https:/@default-cgi@toggle?a=commitdiff_plain;h=02be524369a199fd6d9e3c1b5fdab1042c36926c;p=privoxy.git Added some sanity checks for get_last_url(). Fixed possible segfault caused by my last commit. --- diff --git a/filters.c b/filters.c index edead9da..1300a7ea 100644 --- a/filters.c +++ b/filters.c @@ -1,4 +1,4 @@ -const char filters_rcs[] = "$Id: filters.c,v 1.68 2006/12/05 14:45:48 fabiankeil Exp $"; +const char filters_rcs[] = "$Id: filters.c,v 1.69 2006/12/08 12:39:13 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/filters.c,v $ @@ -40,6 +40,9 @@ const char filters_rcs[] = "$Id: filters.c,v 1.68 2006/12/05 14:45:48 fabiankeil * * Revisions : * $Log: filters.c,v $ + * Revision 1.69 2006/12/08 12:39:13 fabiankeil + * Let get_last_url() catch https URLs as well. + * * Revision 1.68 2006/12/05 14:45:48 fabiankeil * Make sure get_last_url() behaves like advertised * and fast-redirects{} can be combined with redirect{}. @@ -1258,20 +1261,32 @@ char *rewrite_url(char *old_url, const char *pcrs_command) *********************************************************************/ char *get_last_url(char *subject, const char *redirect_mode) { - char *new_url; + char *new_url = NULL; char *tmp; assert(subject); assert(redirect_mode); subject = strdup(subject); + if (subject == NULL) + { + log_error(LOG_LEVEL_ERROR, "Out of memory while searching for redirects."); + return NULL; + } if (0 == strcmpic(redirect_mode, "check-decoded-url")) { log_error(LOG_LEVEL_REDIRECTS, "Decoding \"%s\" if necessary.", subject); new_url = url_decode(subject); - freez(subject); - subject = new_url; + if (new_url != NULL) + { + freez(subject); + subject = new_url; + } + else + { + log_error(LOG_LEVEL_ERROR, "Unable to decode \"%s\".", subject); + } } log_error(LOG_LEVEL_REDIRECTS, "Checking \"%s\" for redirects.", subject); @@ -1284,15 +1299,17 @@ char *get_last_url(char *subject, const char *redirect_mode) { new_url = tmp++; } - tmp = new_url; + tmp = (new_url != NULL) ? new_url : subject; while ((tmp = strstr(tmp, "https://")) != NULL) { new_url = tmp++; } - if ((new_url != subject) - || (0 == strncmpic(subject, "http://", 7)) - || (0 == strncmpic(subject, "https://", 8))) + if ((new_url != NULL) + && ( (new_url != subject) + || (0 == strncmpic(subject, "http://", 7)) + || (0 == strncmpic(subject, "https://", 8)) + )) { /* * Return new URL if we found a redirect