Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Jun 2023 01:39:41 GMT
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: d1016568185d - main - hexdump: Partial lines cannot be repetitions of earlier lines.
Message-ID:  <202306090139.3591dfn1057135@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=d1016568185ddacbf1148acbe26b27258981b4f0

commit d1016568185ddacbf1148acbe26b27258981b4f0
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2023-06-09 01:38:47 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2023-06-09 01:39:05 +0000

    hexdump: Partial lines cannot be repetitions of earlier lines.
    
    When checking for repetitions of earlier lines, we compare the
    first nread bytes of the line against the saved line. However,
    when we read a partial line, it should never be treated as a
    repetition of an earlier line, even if the first bytes match.
    
    This change fixes a bug where a partial line could be
    incorrectly identified as a repetition of an earlier line.
    
    Reported-by:    Mark Adler <madler@alumni.caltech.edu>
    PR:             118723
    Reviewed-by:    emaste
    MFC-after:      2 weeks
    Differential Revision: https://reviews.freebsd.org/D40471
---
 usr.bin/hexdump/display.c                             | 2 +-
 usr.bin/hexdump/tests/Makefile                        | 3 +++
 usr.bin/hexdump/tests/d_hexdump_UCflag_bug118723.out  | 4 ++++
 usr.bin/hexdump/tests/d_hexdump_UCvflag_bug118723.out | 4 ++++
 usr.bin/hexdump/tests/d_hexdump_bug118723.in          | 5 +++++
 usr.bin/hexdump/tests/hexdump_test.sh                 | 8 ++++++++
 6 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/usr.bin/hexdump/display.c b/usr.bin/hexdump/display.c
index 36306ededfc6..b4e7084e1e97 100644
--- a/usr.bin/hexdump/display.c
+++ b/usr.bin/hexdump/display.c
@@ -271,7 +271,7 @@ get(void)
 			 * XXX bcmp() is not quite right in the presence
 			 * of multibyte characters.
 			 */
-			if (vflag != ALL && 
+			if (need == 0 && vflag != ALL &&
 			    valid_save && 
 			    bcmp(curp, savp, nread) == 0) {
 				if (vflag != DUP) {
diff --git a/usr.bin/hexdump/tests/Makefile b/usr.bin/hexdump/tests/Makefile
index 54863cb05603..f7a3575400bb 100644
--- a/usr.bin/hexdump/tests/Makefile
+++ b/usr.bin/hexdump/tests/Makefile
@@ -7,6 +7,7 @@ ATF_TESTS_SH=	hexdump_test od_test
 ${PACKAGE}FILES+=	d_hexdump_a.in
 ${PACKAGE}FILES+=	d_hexdump_b.in
 ${PACKAGE}FILES+=	d_hexdump_c.in
+${PACKAGE}FILES+=	d_hexdump_bug118723.in
 ${PACKAGE}FILES+=	d_hexdump_bflag_a.out
 ${PACKAGE}FILES+=	d_hexdump_bflag_b.out
 ${PACKAGE}FILES+=	d_hexdump_bflag_c.out
@@ -30,6 +31,8 @@ ${PACKAGE}FILES+=	d_hexdump_sflag_a.out
 ${PACKAGE}FILES+=	d_hexdump_UCflag_a.out
 ${PACKAGE}FILES+=	d_hexdump_UCflag_b.out
 ${PACKAGE}FILES+=	d_hexdump_UCflag_c.out
+${PACKAGE}FILES+=	d_hexdump_UCflag_bug118723.out
+${PACKAGE}FILES+=	d_hexdump_UCvflag_bug118723.out
 ${PACKAGE}FILES+=	d_hexdump_xflag_a_el.out
 ${PACKAGE}FILES+=	d_hexdump_xflag_b_el.out
 ${PACKAGE}FILES+=	d_hexdump_xflag_c_el.out
diff --git a/usr.bin/hexdump/tests/d_hexdump_UCflag_bug118723.out b/usr.bin/hexdump/tests/d_hexdump_UCflag_bug118723.out
new file mode 100644
index 000000000000..bd1f5333b6a1
--- /dev/null
+++ b/usr.bin/hexdump/tests/d_hexdump_UCflag_bug118723.out
@@ -0,0 +1,4 @@
+00000000  61 62 63 64 65 66 67 0a  30 31 32 33 34 35 36 0a  |abcdefg.0123456.|
+*
+00000020  61 62 63 64 65 66 67 0a                           |abcdefg.|
+00000028
diff --git a/usr.bin/hexdump/tests/d_hexdump_UCvflag_bug118723.out b/usr.bin/hexdump/tests/d_hexdump_UCvflag_bug118723.out
new file mode 100644
index 000000000000..927897a3cef8
--- /dev/null
+++ b/usr.bin/hexdump/tests/d_hexdump_UCvflag_bug118723.out
@@ -0,0 +1,4 @@
+00000000  61 62 63 64 65 66 67 0a  30 31 32 33 34 35 36 0a  |abcdefg.0123456.|
+00000010  61 62 63 64 65 66 67 0a  30 31 32 33 34 35 36 0a  |abcdefg.0123456.|
+00000020  61 62 63 64 65 66 67 0a                           |abcdefg.|
+00000028
diff --git a/usr.bin/hexdump/tests/d_hexdump_bug118723.in b/usr.bin/hexdump/tests/d_hexdump_bug118723.in
new file mode 100644
index 000000000000..8ecef445e1e6
--- /dev/null
+++ b/usr.bin/hexdump/tests/d_hexdump_bug118723.in
@@ -0,0 +1,5 @@
+abcdefg
+0123456
+abcdefg
+0123456
+abcdefg
diff --git a/usr.bin/hexdump/tests/hexdump_test.sh b/usr.bin/hexdump/tests/hexdump_test.sh
index 5e19d1f99225..31ce52b830cd 100755
--- a/usr.bin/hexdump/tests/hexdump_test.sh
+++ b/usr.bin/hexdump/tests/hexdump_test.sh
@@ -75,6 +75,10 @@ C_flag_body()
 	    hexdump -C "$(atf_get_srcdir)/d_hexdump_b.in"
 	atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
 	    hexdump -C "$(atf_get_srcdir)/d_hexdump_c.in"
+	atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_bug118723.out" \
+	    hexdump -C "$(atf_get_srcdir)/d_hexdump_bug118723.in"
+	atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCvflag_bug118723.out" \
+	    hexdump -Cv "$(atf_get_srcdir)/d_hexdump_bug118723.in"
 }
 
 atf_test_case hd_name
@@ -90,6 +94,10 @@ hd_name_body()
 	    hd "$(atf_get_srcdir)/d_hexdump_b.in"
 	atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
 	    hd "$(atf_get_srcdir)/d_hexdump_c.in"
+	atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_bug118723.out" \
+	    hd "$(atf_get_srcdir)/d_hexdump_bug118723.in"
+	atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCvflag_bug118723.out" \
+	    hd -v "$(atf_get_srcdir)/d_hexdump_bug118723.in"
 }
 
 atf_test_case d_flag



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202306090139.3591dfn1057135>