BUG/MINOR: cfgparse: don't increment linenum on incomplete lines
authorWilly Tarreau <w@1wt.eu>
Thu, 25 Jun 2020 07:37:54 +0000 (09:37 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 21 Jul 2020 16:32:48 +0000 (18:32 +0200)
When fgets() returns an incomplete line we must not increment linenum
otherwise line numbers become incorrect. This may happen when parsing
files with extremely long lines which require a realloc().

The bug has been present since unbounded line length was supported, so
the fix should be backported to older branches.

(cherry picked from commit 40cb26f6ec8cf9d8ba54706d95df4cfed3a7b332)
[wt: adjusted context wrt missing fatal++]
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/cfgparse.c

index 30df16b..af7f790 100644 (file)
@@ -1921,12 +1921,14 @@ next_line:
                                ha_alert("parsing [%s:%d]: line too long, cannot allocate memory.\n",
                                         file, linenum);
                                err_code |= ERR_ALERT | ERR_FATAL;
+                               linenum--;
                                continue;
                        }
 
                        readbytes = linesize - 1;
                        linesize = newlinesize;
                        thisline = newline;
+                       linenum--;
                        continue;
                }