projects
/
privoxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add a couple of +fast-redirect{} tests
[privoxy.git]
/
filters.c
diff --git
a/filters.c
b/filters.c
index
c4bfd9a
..
4de7c90
100644
(file)
--- a/
filters.c
+++ b/
filters.c
@@
-1,4
+1,4
@@
-const char filters_rcs[] = "$Id: filters.c,v 1.1
47 2011/10/30 16:15:43
fabiankeil Exp $";
+const char filters_rcs[] = "$Id: filters.c,v 1.1
52 2011/10/30 16:18:12
fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/filters.c,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/filters.c,v $
@@
-78,6
+78,11
@@
const char filters_rcs[] = "$Id: filters.c,v 1.147 2011/10/30 16:15:43 fabiankei
#include "urlmatch.h"
#include "loaders.h"
#include "urlmatch.h"
#include "loaders.h"
+#ifdef HAVE_STRTOK
+/* Only used for locks */
+#include "jcc.h"
+#endif /* def HAVE_STRTOK */
+
#ifdef _WIN32
#include "win32.h"
#endif
#ifdef _WIN32
#include "win32.h"
#endif
@@
-1109,6
+1114,8
@@
char *get_last_url(char *subject, const char *redirect_mode)
{
log_error(LOG_LEVEL_REDIRECTS,
"Checking \"%s\" for encoded redirects.", subject);
{
log_error(LOG_LEVEL_REDIRECTS,
"Checking \"%s\" for encoded redirects.", subject);
+
+#if defined(MUTEX_LOCKS_AVAILABLE) && defined(HAVE_STRTOK)
/*
* Check each parameter in the URL separately.
* Sectionize the URL at "?" and "&",
/*
* Check each parameter in the URL separately.
* Sectionize the URL at "?" and "&",
@@
-1117,11
+1124,17
@@
char *get_last_url(char *subject, const char *redirect_mode)
* Keep the last one we spot.
*/
char *found = NULL;
* Keep the last one we spot.
*/
char *found = NULL;
+
+ privoxy_mutex_lock(&strtok_mutex);
char *token = strtok(subject, "?&");
while (token)
{
char *dtoken = url_decode(token);
char *token = strtok(subject, "?&");
while (token)
{
char *dtoken = url_decode(token);
- if (!dtoken) continue;
+ if (NULL == dtoken)
+ {
+ log_error(LOG_LEVEL_ERROR, "Unable to decode \"%s\".", token);
+ continue;
+ }
char *h1 = strstr(dtoken, "http://");
char *h2 = strstr(dtoken, "https://");
char *h = (h1 && h2
char *h1 = strstr(dtoken, "http://");
char *h2 = strstr(dtoken, "https://");
char *h = (h1 && h2
@@
-1131,18
+1144,33
@@
char *get_last_url(char *subject, const char *redirect_mode)
{
freez(found);
found = strdup(h);
{
freez(found);
found = strdup(h);
+ if (found == NULL)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "Out of memory while searching for redirects.");
+ privoxy_mutex_unlock(&strtok_mutex);
+ return NULL;
+ }
}
}
+ freez(dtoken);
token = strtok(NULL, "?&");
}
token = strtok(NULL, "?&");
}
+ privoxy_mutex_unlock(&strtok_mutex);
+ freez(subject);
- if (found)
+ return found;
+#else
+ new_url = url_decode(subject);
+ if (new_url != NULL)
{
freez(subject);
{
freez(subject);
-
return found
;
+
subject = new_url
;
}
}
-
- freez(subject);
- return NULL;
+ else
+ {
+ log_error(LOG_LEVEL_ERROR, "Unable to decode \"%s\".", subject);
+ }
+#endif /* defined(MUTEX_LOCKS_AVAILABLE) && defined(HAVE_STRTOK) */
}
/* Else, just look for a URL inside this one, without decoding anything. */
}
/* Else, just look for a URL inside this one, without decoding anything. */