From: Baptiste Daroussin Date: Tue, 2 Nov 2021 13:42:55 +0000 (+0100) Subject: cleanup: replace strtol with safe function when possible X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08447b1be8bc8118677fdc63dd9bd379eac315f1;p=thirdparty%2Fmlmmj.git cleanup: replace strtol with safe function when possible --- diff --git a/include/utils.h b/include/utils.h index 6daf0191..bb88aea4 100644 --- a/include/utils.h +++ b/include/utils.h @@ -23,6 +23,9 @@ #ifndef MLMMJ_UTILS_H #define MLMMJ_UTILS_H +#include + intmax_t strtoim(const char *, intmax_t, intmax_t, const char **); +time_t strtotimet(const char *, const char **); #endif diff --git a/src/Makefile.am b/src/Makefile.am index 38ad22b8..60e75fe1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,7 +52,7 @@ mlmmj_bounce_SOURCES = mlmmj.c mlmmj-bounce.c print-version.c log_error.c \ mlmmj_maintd_SOURCES = mlmmj.c mlmmj-maintd.c print-version.c log_error.c mygetline.c \ strgen.c random-int.c chomp.c memory.c \ - send_digest.c dumpfd2fd.c \ + send_digest.c dumpfd2fd.c utils.c \ mylocking.c log_oper.c readn.c getlistdelim.c \ prepstdreply.c gethdrline.c unistr.c controls.c diff --git a/src/mlmmj-maintd.c b/src/mlmmj-maintd.c index 44767e75..c61ad1bd 100644 --- a/src/mlmmj-maintd.c +++ b/src/mlmmj-maintd.c @@ -45,6 +45,7 @@ #include "send_digest.h" #include "mylocking.h" #include "log_oper.h" +#include "utils.h" static void print_help(const char *prg) { @@ -526,6 +527,7 @@ int clean_nolongerbouncing(struct mlmmj_list *list) time_t probetime, t; struct dirent *dp; struct stat st; + const char *errstr; if(chdir(dirname) < 0) { log_error(LOG_ARGS, "Could not chdir(%s)", dirname); @@ -569,7 +571,7 @@ int clean_nolongerbouncing(struct mlmmj_list *list) } close(probefd); chomp(probetimestr); - probetime = (time_t)strtol(probetimestr, NULL, 10); + probetime = strtotimet(probetimestr, &errstr); myfree(probetimestr); t = time(NULL); if(t - probetime > WAITPROBE) { @@ -680,6 +682,7 @@ int unsub_bouncers(struct mlmmj_list *list, const char *mlmmjunsub) pid_t pid, childpid; int status, fd; time_t bouncetime, t, bouncelife = 0; + const char *errstr; if(chdir(dirname) < 0) { log_error(LOG_ARGS, "Could not chdir(%s)", dirname); @@ -761,7 +764,7 @@ int unsub_bouncers(struct mlmmj_list *list, const char *mlmmjunsub) } a++; /* Increase to first digit */ - bouncetime = (time_t)strtol(a, NULL, 10); + bouncetime = strtotimet(a, &errstr); myfree(firstbounce); t = time(NULL); if(t - bouncetime < bouncelife + WAITPROBE) { diff --git a/src/mlmmj-send.c b/src/mlmmj-send.c index 83c6724f..31bbbd30 100644 --- a/src/mlmmj-send.c +++ b/src/mlmmj-send.c @@ -59,6 +59,7 @@ #include "controls.h" #include "mylocking.h" #include "getaddrsfromfd.h" +#include "utils.h" static int addtohdr = 0; static int prepmailinmem = 0; @@ -813,6 +814,7 @@ int main(int argc, char **argv) struct mlmmj_list list; unsigned short smtpport = 25; struct sigaction sigact; + const char *errstr; mlmmj_list_init(&list); CHECKFULLPATH(argv[0]); @@ -970,7 +972,7 @@ int main(int argc, char **argv) memmailsizestr = ctrlvalue(&list, "memorymailsize"); ctrlarchive = statctrl(&list, "noarchive"); if(memmailsizestr) { - memmailsize = strtol(memmailsizestr, NULL, 10); + memmailsize = strtoim(memmailsizestr, 0, SIZE_T_MAX, &errstr); myfree(memmailsizestr); } diff --git a/src/utils.c b/src/utils.c index 02cdc15c..d139253b 100644 --- a/src/utils.c +++ b/src/utils.c @@ -25,6 +25,8 @@ #include #include +#include "utils.h" + intmax_t strtoim(const char *np, intmax_t minval, intmax_t maxval, const char **errpp) { @@ -56,3 +58,11 @@ strtoim(const char *np, intmax_t minval, intmax_t maxval, const char **errpp) } return (ret); } + +time_t +strtotimet(const char *np, const char **errpp) +{ + if (sizeof(time_t) == 4) + return ((time_t)strtoim(np, INT_MIN, INT_MAX, errpp)); + return ((time_t)strtoim(np, LLONG_MIN, LLONG_MAX, errpp)); +}