aboutsummaryrefslogtreecommitdiff
path: root/tests/diff.test
diff options
context:
space:
mode:
authorAndy Chu <andychu@google.com>2016-03-19 23:11:30 -0700
committerRob Landley <rob@landley.net>2016-04-14 21:30:24 -0500
commit433296f8802ccf82eb32da3bfa002df2a8b5095a (patch)
treef6d98eeab74343cb31a0d9ff67ef07d447f00944 /tests/diff.test
parentc73947814aab381a0761ecc919e6c5407c3fd617 (diff)
downloadtoybox-433296f8802ccf82eb32da3bfa002df2a8b5095a.tar.gz
Fix a buffer overflow in diff -r.
We were doing two 32-byte memset()s instead of two 16-byte memset()s. 'dir' referred to the instance (array of 2) and not the struct type. Add some test coverage for diff, including a case that hit this bug. The bug was found by running cp.test under AddressSanitizer, since it happens to use diff.
Diffstat (limited to 'tests/diff.test')
-rwxr-xr-xtests/diff.test30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/diff.test b/tests/diff.test
new file mode 100755
index 00000000..ca0b682b
--- /dev/null
+++ b/tests/diff.test
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+#testing "name" "command" "result" "infile" "stdin"
+
+seq 10 > left
+seq 11 > right
+
+expected='--- left
++++ right
+@@ -8,3 +8,4 @@
+ 8
+ 9
+ 10
++11
+'
+# Hm this only gives unified diffs?
+testing "simple" "diff left right" "$expected" "" ""
+
+
+expected='--- tree1/file
++++ tree2/file
+@@ -1 +1 @@
+-foo
++food
+'
+mkdir -p tree1 tree2
+echo foo > tree1/file
+echo food > tree2/file
+
+testing "simple" "diff -r tree1 tree2 |tee out" "$expected" "" ""