]> git.ipfire.org Git - thirdparty/git.git/commit - t/t6009-rev-list-parent.sh
revision: parse integer arguments to --max-count, --skip, etc., more carefully
authorJunio C Hamano <gitster@pobox.com>
Fri, 8 Dec 2023 22:35:23 +0000 (07:35 +0900)
committerJunio C Hamano <gitster@pobox.com>
Fri, 8 Dec 2023 23:57:31 +0000 (08:57 +0900)
commit71a1e94821666909b7b2bd62a36244c601f8430e
tree2b8ea04cc07d412fa6a1c42b68c2e6a7b29b6deb
parent61a22ddaf0626111193a17ac12f366bd6d167dff
revision: parse integer arguments to --max-count, --skip, etc., more carefully

The "rev-list" and other commands in the "log" family, being the
oldest part of the system, use their own custom argument parsers,
and integer values of some options are parsed with atoi(), which
allows a non-digit after the number (e.g., "1q") to be silently
ignored.  As a natural consequence, an argument that does not begin
with a digit (e.g., "q") silently becomes zero, too.

Switch to use strtol_i() and parse_timestamp() appropriately to
catch bogus input.

Note that one may naïvely expect that --max-count, --skip, etc., to
only take non-negative values, but we must allow them to also take
negative values, as an escape hatch to countermand a limit set by an
earlier option on the command line; the underlying variables are
initialized to (-1) and "--max-count=-1", for example, is a
legitimate way to reinitialize the limit.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
revision.c
t/t6005-rev-list-count.sh
t/t6009-rev-list-parent.sh