]> git.ipfire.org Git - thirdparty/iptables.git/commit
xtables-restore: fix for --noflush and empty lines
authorPhil Sutter <phil@nwl.cc>
Tue, 11 Feb 2020 15:52:59 +0000 (16:52 +0100)
committerPhil Sutter <phil@nwl.cc>
Wed, 12 Feb 2020 14:15:10 +0000 (15:15 +0100)
commit8e76391096f12212985c401ee83a67990aa27a29
treee47eae62760bf28cf9108fc9816b9b403b4e2352
parente179e87a1179e272a9bdabb0220b17d61d099ee3
xtables-restore: fix for --noflush and empty lines

Lookahead buffer used for cache requirements estimate in restore
--noflush separates individual lines with nul-chars. Two consecutive
nul-chars are interpreted as end of buffer and remaining buffer content
is skipped.

Sadly, reading an empty line (i.e., one containing a newline character
only) caused double nul-chars to appear in buffer as well, leading to
premature stop when reading cached lines from buffer.

To fix that, make use of xtables_restore_parse_line() skipping empty
lines without calling strtok() and just leave the newline character in
place. A more intuitive approach, namely skipping empty lines while
buffering, is deliberately not chosen as that would cause wrong values
in 'line' variable.

Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1400
Fixes: 09cb517949e69 ("xtables-restore: Improve performance of --noflush operation")
Signed-off-by: Phil Sutter <phil@nwl.cc>
Acked-by: Arturo Borrero Gonzalez <arturo@netfilter.org>
iptables/tests/shell/testcases/ipt-restore/0011-noflush-empty-line_0 [new file with mode: 0755]
iptables/xtables-restore.c