← Commit list

e5d5f5b9a

Denys Vlasenko
Denys Vlasenko
2018-07-03
SUCCESS Duration: 147s

Subject

hexdump: fix short file of zero butes treated as dup

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

libbb/dump.c+9 -5
@@ -387,7 +387,10 @@ static unsigned char *get(priv_dumper_t *dumper)
if (need == blocksize) {
return NULL;
}
- if (dumper->pub.dump_vflag != ALL && !memcmp(dumper->get__curp, dumper->get__savp, nread)) {
+ if (dumper->pub.dump_vflag != ALL /* not "show all"? */
+ && dumper->pub.dump_vflag != FIRST /* not first line? */
+ && memcmp(dumper->get__curp, dumper->get__savp, nread) == 0 /* same data? */
+ ) {
if (dumper->pub.dump_vflag != DUP) {
puts("*");
}
@@ -399,7 +402,7 @@ static unsigned char *get(priv_dumper_t *dumper)
}
n = fread(dumper->get__curp + nread, sizeof(unsigned char),
dumper->pub.dump_length == -1 ? need : MIN(dumper->pub.dump_length, need), stdin);
- if (!n) {
+ if (n == 0) {
if (ferror(stdin)) {
bb_simple_perror_msg(dumper->argv[-1]);
}
@@ -411,9 +414,10 @@ static unsigned char *get(priv_dumper_t *dumper)
dumper->pub.dump_length -= n;
}
need -= n;
- if (!need) {
- if (dumper->pub.dump_vflag == ALL || dumper->pub.dump_vflag == FIRST
- || memcmp(dumper->get__curp, dumper->get__savp, blocksize)
+ if (need == 0) {
+ if (dumper->pub.dump_vflag == ALL /* "show all"? */
+ || dumper->pub.dump_vflag == FIRST /* first line? */
+ || memcmp(dumper->get__curp, dumper->get__savp, blocksize) != 0 /* not same data? */
) {
if (dumper->pub.dump_vflag == DUP || dumper->pub.dump_vflag == FIRST) {
dumper->pub.dump_vflag = WAIT;
testsuite/hexdump.tests+18 -0
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Copyright 2018 by Denys Vlasenko <[email protected]>
+# Licensed under GPLv2, see file LICENSE in this source tree.
+
+. ./testing.sh
+
+# testing "description" "command" "result" "infile" "stdin"
+testing 'hexdump -C with four NULs' \
+ 'hexdump -C' \
+ "\
+00000000 00 00 00 00 |....|
+00000004
+" \
+ '' \
+ '\0\0\0\0'
+
+exit $FAILCOUNT