aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2000-05-09 12:29:28 +0000
committerDaniel Stenberg <daniel@haxx.se>2000-05-09 12:29:28 +0000
commitb64dd9c13fb63324b75561fe564155746bc51b4c (patch)
tree90783e5830b4fc102eb6d29dc5c46bfdd464403e /src
parentfac113a275e71ea396824f9f666100a03e4e215f (diff)
changed the glob_url() call, after Janne Johansson's buffer overflow report
Diffstat (limited to 'src')
-rw-r--r--src/main.c10
-rw-r--r--src/urlglob.c15
-rw-r--r--src/urlglob.h2
3 files changed, 18 insertions, 9 deletions
diff --git a/src/main.c b/src/main.c
index 7438b0e0e..cadc9cf44 100644
--- a/src/main.c
+++ b/src/main.c
@@ -961,12 +961,16 @@ int main(int argc, char *argv[])
return URG_FAILED_INIT;
}
#if 0
- fprintf(stderr, "URL: %s PROXY: %s\n", url, config.proxy?config.proxy:"none");
+ fprintf(stderr, "URL: %s PROXY: %s\n", url, config.proxy?config.proxy:"none");
#endif
#ifdef GLOBURL
- urlnum = glob_url(&urls, url); /* expand '{...}' and '[...]' expressions and return
- total number of URLs in pattern set */
+ /* expand '{...}' and '[...]' expressions and return total number of URLs
+ in pattern set */
+ res = glob_url(&urls, url, &urlnum);
+ if(res != URG_OK)
+ return res;
+
outfiles = config.outfile; /* save outfile pattern befor expansion */
if (!outfiles && !config.remotefile && urlnum > 1) {
#ifdef CURL_SEPARATORS
diff --git a/src/urlglob.c b/src/urlglob.c
index 48974d1fa..9f4134077 100644
--- a/src/urlglob.c
+++ b/src/urlglob.c
@@ -204,17 +204,22 @@ int glob_word(char *pattern, int pos) {
exit (URG_FAILED_INIT);
}
-int glob_url(URLGlob** glob, char* url) {
- int urlnum; /* counts instances of a globbed pattern */
+int glob_url(URLGlob** glob, char* url, int *urlnum)
+{
+ if (strlen(url)>URL_MAX_LENGTH) {
+ printf("Illegally sized URL\n");
+ return URG_URL_MALFORMAT;
+ }
glob_expand = (URLGlob*)malloc(sizeof(URLGlob));
glob_expand->size = 0;
- urlnum = glob_word(url, 1);
+ *urlnum = glob_word(url, 1);
*glob = glob_expand;
- return urlnum;
+ return URG_OK;
}
-char *next_url(URLGlob *glob) {
+char *next_url(URLGlob *glob)
+{
static int beenhere = 0;
char *buf = glob_buffer;
URLPattern *pat;
diff --git a/src/urlglob.h b/src/urlglob.h
index dc52371ee..230f5f770 100644
--- a/src/urlglob.h
+++ b/src/urlglob.h
@@ -67,7 +67,7 @@ typedef struct {
int size;
} URLGlob;
-int glob_url(URLGlob**, char*);
+int glob_url(URLGlob**, char*, int *);
char* next_url(URLGlob*);
char* match_url(char*, URLGlob);