]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
cleanup: replace strtol with safe function when possible
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 2 Nov 2021 13:42:55 +0000 (14:42 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Wed, 3 Nov 2021 13:10:28 +0000 (14:10 +0100)
include/utils.h
src/Makefile.am
src/mlmmj-maintd.c
src/mlmmj-send.c
src/utils.c

index 6daf0191ad7329cec5712c74747a1458cb34fb49..bb88aea41defe207cec9f80b06d04eac7a650193 100644 (file)
@@ -23,6 +23,9 @@
 #ifndef MLMMJ_UTILS_H
 #define MLMMJ_UTILS_H
 
+#include <time.h>
+
 intmax_t strtoim(const char *, intmax_t, intmax_t, const char **);
+time_t strtotimet(const char *, const char **);
 
 #endif
index 38ad22b87bababf88a32636a0b063c8b9540964d..60e75fe1d0879e5d384261e68ea70239a86d26ea 100644 (file)
@@ -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
 
index 44767e7509ce5b69e2181bc5cfea013174afe5ad..c61ad1bdf05aafb41a77df6bd41dfdc584be6cb7 100644 (file)
@@ -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) {
index 83c6724f5d6f975395bd4313c8c859044c3f1e7d..31bbbd303e4581a0964f4a1d9d6e67edb918d079 100644 (file)
@@ -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);
        }
 
index 02cdc15c0d910ebcfe90ef4e9acad4dae5f688e1..d139253b5310f31d07d05465f49f417729750765 100644 (file)
@@ -25,6 +25,8 @@
 #include <limits.h>
 #include <stdlib.h>
 
+#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));
+}