summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2000-05-19 09:45:42 +0000
committerdes <des@FreeBSD.org>2000-05-19 09:45:42 +0000
commit4721396b1df8b77895c0124ad978ed50298df17a (patch)
treef5daa5581e267b5da7833390443655c8fcb5bb39 /lib
parentb2022bf2c95bb5607e93b7eb49adb01615fc62b7 (diff)
downloadFreeBSD-src-4721396b1df8b77895c0124ad978ed50298df17a.zip
FreeBSD-src-4721396b1df8b77895c0124ad978ed50298df17a.tar.gz
Better handling of some boundary conditions.
Submitted by: ume
Diffstat (limited to 'lib')
-rw-r--r--lib/libfetch/ftp.c11
-rw-r--r--lib/libfetch/http.c2
2 files changed, 9 insertions, 4 deletions
diff --git a/lib/libfetch/ftp.c b/lib/libfetch/ftp.c
index fab45f5..9eb052d 100644
--- a/lib/libfetch/ftp.c
+++ b/lib/libfetch/ftp.c
@@ -100,7 +100,8 @@ static size_t lr_size, lr_length;
static int last_code;
#define isftpreply(foo) (isdigit(foo[0]) && isdigit(foo[1]) \
- && isdigit(foo[2]) && foo[3] == ' ')
+ && isdigit(foo[2]) \
+ && (foo[3] == ' ' || foo[3] == '\0'))
#define isftpinfo(foo) (isdigit(foo[0]) && isdigit(foo[1]) \
&& isdigit(foo[2]) && foo[3] == '-')
@@ -238,11 +239,13 @@ _ftp_transfer(int cd, char *oper, char *file,
* is IMHO the one and only weak point in the FTP protocol.
*/
ln = last_reply;
- for (p = ln + 3; !isdigit(*p); p++)
+ for (p = ln + 3; *p && !isdigit(*p); p++)
/* nothing */ ;
- for (p--, i = 0; i < 6; i++) {
- p++; /* skip the comma */
+ for (i = 0; *p, i < 6; i++, p++)
addr[i] = strtol(p, &p, 10);
+ if (i < 6) {
+ e = 999;
+ goto ouch;
}
/* seek to required offset */
diff --git a/lib/libfetch/http.c b/lib/libfetch/http.c
index a395881..a61ef9a 100644
--- a/lib/libfetch/http.c
+++ b/lib/libfetch/http.c
@@ -135,6 +135,8 @@ _http_fillbuf(struct cookie *c)
} else if (c->encoding == ENC_CHUNKED) {
if (c->chunksize == 0) {
ln = fgetln(c->real_f, &len);
+ if (len <= 2)
+ return NULL;
DEBUG(fprintf(stderr, "\033[1m_http_fillbuf(): new chunk: "
"%*.*s\033[m\n", (int)len-2, (int)len-2, ln));
sscanf(ln, "%x", &(c->chunksize));
OpenPOWER on IntegriCloud