summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/patch/patch/0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/patch/patch/0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch')
-rw-r--r--meta/recipes-devtools/patch/patch/0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/meta/recipes-devtools/patch/patch/0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch b/meta/recipes-devtools/patch/patch/0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch
new file mode 100644
index 0000000000..d6a219a1b1
--- /dev/null
+++ b/meta/recipes-devtools/patch/patch/0001-Don-t-leak-temporary-file-on-failed-multi-file-ed.patch
@@ -0,0 +1,80 @@
1From 369dcccdfa6336e5a873d6d63705cfbe04c55727 Mon Sep 17 00:00:00 2001
2From: Jean Delvare <jdelvare@suse.de>
3Date: Mon, 7 May 2018 15:14:45 +0200
4Subject: Don't leak temporary file on failed multi-file ed-style patch
5
6The previous fix worked fine with single-file ed-style patches, but
7would still leak temporary files in the case of multi-file ed-style
8patch. Fix that case as well, and extend the test case to check for
9it.
10
11* src/patch.c (main): Unlink TMPEDNAME if needed before moving to
12 the next file in a patch.
13
14This closes bug #53820:
15https://savannah.gnu.org/bugs/index.php?53820
16
17Fixes: 123eaff0d5d1 ("Fix arbitrary command execution in ed-style patches (CVE-2018-1000156)")
18Fixes: 19599883ffb6 ("Don't leak temporary file on failed ed-style patch")
19
20Upstream-Status: Backport [http://git.savannah.gnu.org/cgit/patch.git/commit/?id=369dcccdfa6336e5a873d6d63705cfbe04c55727]
21Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
22---
23 src/patch.c | 1 +
24 tests/ed-style | 31 +++++++++++++++++++++++++++++++
25 2 files changed, 32 insertions(+)
26
27diff --git a/src/patch.c b/src/patch.c
28index 9146597..81c7a02 100644
29--- a/src/patch.c
30+++ b/src/patch.c
31@@ -236,6 +236,7 @@ main (int argc, char **argv)
32 }
33 remove_if_needed (TMPOUTNAME, &TMPOUTNAME_needs_removal);
34 }
35+ remove_if_needed (TMPEDNAME, &TMPEDNAME_needs_removal);
36
37 if (! skip_rest_of_patch && ! file_type)
38 {
39diff --git a/tests/ed-style b/tests/ed-style
40index 6b6ef9d..504e6e5 100644
41--- a/tests/ed-style
42+++ b/tests/ed-style
43@@ -38,3 +38,34 @@ EOF
44 check 'cat foo' <<EOF
45 foo
46 EOF
47+
48+# Test the case where one ed-style patch modifies several files
49+
50+cat > ed3.diff <<EOF
51+--- foo
52++++ foo
53+1c
54+bar
55+.
56+--- baz
57++++ baz
58+0a
59+baz
60+.
61+EOF
62+
63+# Apparently we can't create a file with such a patch, while it works fine
64+# when the file name is provided on the command line
65+cat > baz <<EOF
66+EOF
67+
68+check 'patch -e -i ed3.diff' <<EOF
69+EOF
70+
71+check 'cat foo' <<EOF
72+bar
73+EOF
74+
75+check 'cat baz' <<EOF
76+baz
77+EOF
78--
79cgit v1.0-41-gc330
80