]> granicus.if.org Git - cronie/commitdiff
Anacron does not correctly check configuration parameters for validity and can segfau...
authorMartin Poole <mpoole@redhat.com>
Wed, 18 Dec 2013 13:53:36 +0000 (14:53 +0100)
committerMarcela Mašláňová <mmaslano@redhat.com>
Wed, 18 Dec 2013 13:53:36 +0000 (14:53 +0100)
Signed-off-by: Marcela Mašláňová <mmaslano@redhat.com>
anacron/readtab.c

index e378faf26cf86cad30ffb6025dce8d38fa247580..d5c3c7ca6c3a08c58eddff551c2192e2b0cc603a 100644 (file)
@@ -271,7 +271,8 @@ parse_tab_line(char *line)
         if (strncmp(env_var, "START_HOURS_RANGE", 17) == 0)
         {
             r = match_rx("^([[:digit:]]+)-([[:digit:]]+)$", value, 2, &from, &to);
-            if ((r == -1) || (from == NULL) || (to == NULL)) goto reg_invalid;
+            if (r == -1) goto reg_err;
+            if (r == 0) goto reg_invalid;
             range_start = atoi(from);
             range_stop = atoi(to);
             if (range_stop < range_start) {
@@ -282,14 +283,19 @@ parse_tab_line(char *line)
         }
         if (strncmp(env_var, "RANDOM_DELAY", 12) == 0) {
             r = match_rx("^([[:digit:]]+)$", value, 0);
-            if (r != -1) {
-                int i = random();
-                double x = 0;
-                x = (double) i / (double) RAND_MAX * (double) (atoi(value));
-                random_number = (int)x;
-                Debug(("Randomized delay set: %d", random_number));
+            if (r != -1) goto reg_err;
+            if (r)
+            {
+                random_number = 0;
+                if (atoi(value) > 0) {
+                    int i = random();
+                    double x = 0;
+                    x = (double) i / (double) RAND_MAX * (double) (atoi(value));
+                    random_number = (int)x;
+                }
+                    Debug(("Randomized delay set: %d", random_number));
             }
-        else goto reg_invalid;
+            else goto reg_invalid;
         }
         if (strncmp(env_var, "PREFERRED_HOUR", 14) == 0) {
             r = match_rx("^([[:digit:]]+)$", value, 1, &pref_hour);