diff: fix segfault with --tabsize and no/malformed argument
--tabsize was previously listed as optional_argument, but didn't account for the optionality of it in the argument handling. This is irrelevant -- the manpage doesn't indicate that the argument is optional, and indeed there's no clear interpretation of omitting the argument because there's no other side effect of --tabsize. The "malformed" argument part of the header on this message is simply referring to usage like this: % diff --tabsize 4 A B With an optional_argument, the argument must be attached to the parameter directly (e.g. --tabsize=4), so the argument is effectively NULL with the above invocation as if no argument had been passed. PR: 243974 Submitted by: fehmi noyan isi <fnoyanisi yahoo com> (diff.c portion) MFC after: 3 days
This commit is contained in:
parent
f750d0d60d
commit
43fbd65451
@ -30,7 +30,7 @@
|
||||
.\" @(#)diff.1 8.1 (Berkeley) 6/30/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd February 12, 2020
|
||||
.Dd February 13, 2020
|
||||
.Dt DIFF 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -60,7 +60,7 @@
|
||||
.Op Fl -starting-file
|
||||
.Op Fl -speed-large-files
|
||||
.Op Fl -strip-trailing-cr
|
||||
.Op Fl -tabsize
|
||||
.Op Fl -tabsize Ar number
|
||||
.Op Fl -text
|
||||
.Op Fl -unified
|
||||
.Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
|
||||
@ -88,7 +88,7 @@
|
||||
.Op Fl -speed-large-files
|
||||
.Op Fl -starting-file
|
||||
.Op Fl -strip-trailing-cr
|
||||
.Op Fl -tabsize
|
||||
.Op Fl -tabsize Ar number
|
||||
.Op Fl -text
|
||||
.Fl C Ar number | -context Ar number
|
||||
.Ar file1 file2
|
||||
@ -113,7 +113,7 @@
|
||||
.Op Fl -speed-large-files
|
||||
.Op Fl -starting-file
|
||||
.Op Fl -strip-trailing-cr
|
||||
.Op Fl -tabsize
|
||||
.Op Fl -tabsize Ar number
|
||||
.Op Fl -text
|
||||
.Fl D Ar string | Fl -ifdef Ar string
|
||||
.Ar file1 file2
|
||||
@ -139,7 +139,7 @@
|
||||
.Op Fl -speed-large-files
|
||||
.Op Fl -starting-file
|
||||
.Op Fl -strip-trailing-cr
|
||||
.Op Fl -tabsize
|
||||
.Op Fl -tabsize Ar number
|
||||
.Op Fl -text
|
||||
.Fl U Ar number | Fl -unified Ar number
|
||||
.Ar file1 file2
|
||||
@ -170,7 +170,7 @@
|
||||
.Op Fl -show-c-function
|
||||
.Op Fl -speed-large-files
|
||||
.Op Fl -strip-trailing-cr
|
||||
.Op Fl -tabsize
|
||||
.Op Fl -tabsize Ar number
|
||||
.Op Fl -text
|
||||
.Op Fl -unidirectional-new-file
|
||||
.Op Fl -unified
|
||||
@ -192,7 +192,7 @@
|
||||
.Op Fl -no-ignore-file-name-case
|
||||
.Op Fl -strip-trailing-cr
|
||||
.Op Fl -suppress-common-lines
|
||||
.Op Fl -tabsize
|
||||
.Op Fl -tabsize Ar number
|
||||
.Op Fl -text
|
||||
.Op Fl -width
|
||||
.Fl y | Fl -side-by-side
|
||||
|
@ -93,7 +93,7 @@ static struct option longopts[] = {
|
||||
{ "no-ignore-file-name-case", no_argument, NULL, OPT_NO_IGN_FN_CASE },
|
||||
{ "normal", no_argument, NULL, OPT_NORMAL },
|
||||
{ "strip-trailing-cr", no_argument, NULL, OPT_STRIPCR },
|
||||
{ "tabsize", optional_argument, NULL, OPT_TSIZE },
|
||||
{ "tabsize", required_argument, NULL, OPT_TSIZE },
|
||||
{ "changed-group-format", required_argument, NULL, OPT_CHANGED_GROUP_FORMAT},
|
||||
{ "suppress-common-lines", no_argument, NULL, OPT_SUPPRESS_COMMON },
|
||||
{ NULL, 0, 0, '\0'}
|
||||
|
@ -10,6 +10,7 @@ atf_test_case side_by_side
|
||||
atf_test_case brief_format
|
||||
atf_test_case b230049
|
||||
atf_test_case Bflag
|
||||
atf_test_case tabsize
|
||||
|
||||
simple_body()
|
||||
{
|
||||
@ -164,6 +165,16 @@ Bflag_body()
|
||||
atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_F.out" diff -B E F
|
||||
}
|
||||
|
||||
tabsize_body()
|
||||
{
|
||||
printf "\tA\n" > A
|
||||
printf "\tB\n" > B
|
||||
|
||||
atf_check -s exit:1 \
|
||||
-o inline:"1c1\n< A\n---\n> B\n" \
|
||||
diff -t --tabsize 1 A B
|
||||
}
|
||||
|
||||
atf_init_test_cases()
|
||||
{
|
||||
atf_add_test_case simple
|
||||
@ -176,4 +187,5 @@ atf_init_test_cases()
|
||||
atf_add_test_case brief_format
|
||||
atf_add_test_case b230049
|
||||
atf_add_test_case Bflag
|
||||
atf_add_test_case tabsize
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user