sfeed

Simple RSS and Atom feed parser
git clone https://git.sinitax.com/codemadness/sfeed
Log | Files | Refs | README | LICENSE | Upstream | sfeed.txt

commit 97a069df32404705b9c5782cae338a0ea39f4535
parent af2d105e1e48c593e3536fecbd251671f81ccf9c
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sat, 28 Jun 2014 15:38:48 +0200

handle invalid values of strto*l

Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>

Diffstat:
Msfeed.c | 2+-
Msfeed_frames.c | 5++++-
Msfeed_html.c | 4++++
Msfeed_plain.c | 4++++
Msfeed_stats.c | 4++++
5 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/sfeed.c b/sfeed.c @@ -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 @@ -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 @@ -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 @@ -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 @@ -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]))) {