mirror of https://github.com/mirror/busybox.git
patch: segfault fix. Closes 7916
Fix segfault on this case (malformed --- line): -- dwarves.orig 2015-02-25 01:45:27.753000000 +0000 +++ dwarves 2015-02-25 01:46:08.199000000 +0000 @@ -1,7 +1,7 @@ Bashful Doc Dopey -Grouchy +Grumpy Happy Sleepy Sneezy function old new delta patch_main 1903 1957 +54 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>1_24_stable
parent
7b434a67dc
commit
fe8b5802ba
|
@ -345,6 +345,8 @@ done:
|
||||||
// state 1: Found +++ file indicator, look for @@
|
// state 1: Found +++ file indicator, look for @@
|
||||||
// state 2: In hunk: counting initial context lines
|
// state 2: In hunk: counting initial context lines
|
||||||
// state 3: In hunk: getting body
|
// state 3: In hunk: getting body
|
||||||
|
// Like GNU patch, we don't require a --- line before the +++, and
|
||||||
|
// also allow the --- after the +++ line.
|
||||||
|
|
||||||
int patch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
int patch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int patch_main(int argc UNUSED_PARAM, char **argv)
|
int patch_main(int argc UNUSED_PARAM, char **argv)
|
||||||
|
@ -462,6 +464,14 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
|
||||||
TT.context = 0;
|
TT.context = 0;
|
||||||
state = 2;
|
state = 2;
|
||||||
|
|
||||||
|
// If the --- line is missing or malformed, either oldname
|
||||||
|
// or (for -R) newname could be NULL -- but not both. Like
|
||||||
|
// GNU patch, proceed based on the +++ line, and avoid SEGVs.
|
||||||
|
if (!oldname)
|
||||||
|
oldname = xstrdup("MISSING_FILENAME");
|
||||||
|
if (!newname)
|
||||||
|
newname = xstrdup("MISSING_FILENAME");
|
||||||
|
|
||||||
// If this is the first hunk, open the file.
|
// If this is the first hunk, open the file.
|
||||||
if (TT.filein == -1) {
|
if (TT.filein == -1) {
|
||||||
int oldsum, newsum, empty = 0;
|
int oldsum, newsum, empty = 0;
|
||||||
|
|
Loading…
Reference in New Issue