diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2014-06-28 15:38:48 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2014-06-28 15:38:48 +0200 |
commit | 97a069df32404705b9c5782cae338a0ea39f4535 (patch) | |
tree | 3e7a28980945bdf27a3312b8223af321ae262d6e | |
parent | af2d105e1e48c593e3536fecbd251671f81ccf9c (diff) |
handle invalid values of strto*l
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
-rw-r--r-- | sfeed.c | 2 | ||||
-rw-r--r-- | sfeed_frames.c | 5 | ||||
-rw-r--r-- | sfeed_html.c | 4 | ||||
-rw-r--r-- | sfeed_plain.c | 4 | ||||
-rw-r--r-- | sfeed_stats.c | 4 |
5 files changed, 17 insertions, 2 deletions
@@ -188,7 +188,7 @@ entitytostr(const char *e, char *buffer, size_t bufsiz) { l = strtoul(e + 1, NULL, 16); /* hex */ else l = strtoul(e, NULL, 10); /* decimal */ - if(errno != 0 || !l) + if(errno != 0) return 0; /* invalid value */ if(!(len = codepointtoutf8(l, &cp))) return 0; diff --git a/sfeed_frames.c b/sfeed_frames.c index 8496311..683f9e0 100644 --- a/sfeed_frames.c +++ b/sfeed_frames.c @@ -7,8 +7,8 @@ #include <sys/types.h> #include <sys/stat.h> #include <utime.h> -#include <errno.h> #include <limits.h> +#include <errno.h> #include "util.h" @@ -216,7 +216,10 @@ main(int argc, char **argv) { } /* write item. */ + errno = 0; parsedtime = (time_t)strtol(fields[FieldUnixTimestamp], NULL, 10); + if(errno != 0) + parsedtime = 0; /* set modified and access time of file to time of item. */ contenttime.actime = parsedtime; contenttime.modtime = parsedtime; diff --git a/sfeed_html.c b/sfeed_html.c index afd3e4c..8ba798b 100644 --- a/sfeed_html.c +++ b/sfeed_html.c @@ -3,6 +3,7 @@ #include <stdlib.h> #include <time.h> #include <ctype.h> +#include <errno.h> #include "util.h" @@ -50,7 +51,10 @@ main(void) { feeds = fcur; while(parseline(&line, &size, fields, FieldLast, '\t', stdin) > 0) { + errno = 0; parsedtime = (time_t)strtol(fields[FieldUnixTimestamp], NULL, 10); + if(errno != 0) + parsedtime = 0; isnew = (parsedtime >= comparetime) ? 1 : 0; islink = (fields[FieldLink][0] != '\0') ? 1 : 0; /* first of feed section or new feed section. */ diff --git a/sfeed_plain.c b/sfeed_plain.c index ca5756b..f57a8c8 100644 --- a/sfeed_plain.c +++ b/sfeed_plain.c @@ -2,6 +2,7 @@ #include <string.h> #include <stdlib.h> #include <time.h> +#include <errno.h> #include "util.h" @@ -27,7 +28,10 @@ main(void) { comparetime = time(NULL) - (3600 * 24); /* 1 day is old news */ while(parseline(&line, &size, fields, FieldLast, '\t', stdin) > 0) { + errno = 0; parsedtime = (time_t)strtol(fields[FieldUnixTimestamp], NULL, 10); + if(errno != 0) + parsedtime = 0; if(parsedtime >= comparetime) fputs(" N ", stdout); else diff --git a/sfeed_stats.c b/sfeed_stats.c index 3773e4a..a750dc1 100644 --- a/sfeed_stats.c +++ b/sfeed_stats.c @@ -3,6 +3,7 @@ #include <stdlib.h> #include <time.h> #include <ctype.h> +#include <errno.h> #include "util.h" @@ -40,7 +41,10 @@ main(void) { feeds = fcur; while(parseline(&line, &size, fields, FieldLast, '\t', stdin) > 0) { + errno = 0; parsedtime = (time_t)strtol(fields[FieldUnixTimestamp], NULL, 10); + if(errno != 0) + parsedtime = 0; isnew = (parsedtime >= comparetime) ? 1 : 0; /* first of feed section or new feed section. */ if(!totalfeeds || (fcur && strcmp(fcur->name, fields[FieldFeedName]))) { |