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
This commit is contained in:
parent
cbbac56091
commit
d101656818
|
@ -271,7 +271,7 @@ get(void)
|
||||||
* XXX bcmp() is not quite right in the presence
|
* XXX bcmp() is not quite right in the presence
|
||||||
* of multibyte characters.
|
* of multibyte characters.
|
||||||
*/
|
*/
|
||||||
if (vflag != ALL &&
|
if (need == 0 && vflag != ALL &&
|
||||||
valid_save &&
|
valid_save &&
|
||||||
bcmp(curp, savp, nread) == 0) {
|
bcmp(curp, savp, nread) == 0) {
|
||||||
if (vflag != DUP) {
|
if (vflag != DUP) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ ATF_TESTS_SH= hexdump_test od_test
|
||||||
${PACKAGE}FILES+= d_hexdump_a.in
|
${PACKAGE}FILES+= d_hexdump_a.in
|
||||||
${PACKAGE}FILES+= d_hexdump_b.in
|
${PACKAGE}FILES+= d_hexdump_b.in
|
||||||
${PACKAGE}FILES+= d_hexdump_c.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_a.out
|
||||||
${PACKAGE}FILES+= d_hexdump_bflag_b.out
|
${PACKAGE}FILES+= d_hexdump_bflag_b.out
|
||||||
${PACKAGE}FILES+= d_hexdump_bflag_c.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_a.out
|
||||||
${PACKAGE}FILES+= d_hexdump_UCflag_b.out
|
${PACKAGE}FILES+= d_hexdump_UCflag_b.out
|
||||||
${PACKAGE}FILES+= d_hexdump_UCflag_c.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_a_el.out
|
||||||
${PACKAGE}FILES+= d_hexdump_xflag_b_el.out
|
${PACKAGE}FILES+= d_hexdump_xflag_b_el.out
|
||||||
${PACKAGE}FILES+= d_hexdump_xflag_c_el.out
|
${PACKAGE}FILES+= d_hexdump_xflag_c_el.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
|
|
@ -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
|
|
@ -0,0 +1,5 @@
|
||||||
|
abcdefg
|
||||||
|
0123456
|
||||||
|
abcdefg
|
||||||
|
0123456
|
||||||
|
abcdefg
|
|
@ -75,6 +75,10 @@ C_flag_body()
|
||||||
hexdump -C "$(atf_get_srcdir)/d_hexdump_b.in"
|
hexdump -C "$(atf_get_srcdir)/d_hexdump_b.in"
|
||||||
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
|
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
|
||||||
hexdump -C "$(atf_get_srcdir)/d_hexdump_c.in"
|
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
|
atf_test_case hd_name
|
||||||
|
@ -90,6 +94,10 @@ hd_name_body()
|
||||||
hd "$(atf_get_srcdir)/d_hexdump_b.in"
|
hd "$(atf_get_srcdir)/d_hexdump_b.in"
|
||||||
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
|
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
|
||||||
hd "$(atf_get_srcdir)/d_hexdump_c.in"
|
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
|
atf_test_case d_flag
|
||||||
|
|
Loading…
Reference in New Issue