diff options
author | Paul Smith <psmith@gnu.org> | 2013-05-26 14:41:45 -0400 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2013-05-26 14:41:45 -0400 |
commit | c11024b3b3532ef7eb80df7d55c8b2fcdc20ce93 (patch) | |
tree | f787d5b91d5ef0c3db9653d551bd55bfa4b8c22e | |
parent | 2fc0f614becf8e7de4fbd5b87cbc812b407ad39a (diff) | |
download | gunmake-c11024b3b3532ef7eb80df7d55c8b2fcdc20ce93.tar.gz |
[SV #38945] Copy the entire buffer back when overwriting CR
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | read.c | 2 | ||||
-rw-r--r-- | tests/ChangeLog | 1 | ||||
-rw-r--r-- | tests/scripts/misc/bs-nl | 9 |
4 files changed, 12 insertions, 3 deletions
@@ -1,5 +1,8 @@ 2013-05-26 Paul Smith <psmith@gnu.org> + * read.c (readline): To be safe, move the entire buffer if we + detect a CR. Fixes Savannah bug #38945. + * job.c (new_job): Compare OUT to the beginning of the OUT var/function, not IN. Fixes Savannah bug #39035. @@ -2542,7 +2542,7 @@ readline (struct ebuffer *ebuf) if ((p - start) > 1 && p[-2] == '\r') { --p; - p[-1] = '\n'; + memmove (p-1, p, strlen (p) + 1); } #endif diff --git a/tests/ChangeLog b/tests/ChangeLog index 1f93930..7f1bd3c 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,6 +1,7 @@ 2013-05-26 Paul Smith <psmith@gnu.org> * scripts/misc/bs-nl: Test for Savannah bug #39035. + Add a test for Savannah bug #38945. 2013-05-22 Paul Smith <psmith@gnu.org> diff --git a/tests/scripts/misc/bs-nl b/tests/scripts/misc/bs-nl index aa7661e..4fc3f63 100644 --- a/tests/scripts/misc/bs-nl +++ b/tests/scripts/misc/bs-nl @@ -114,10 +114,15 @@ t:; @$(call f,"a \ my $m1 = get_tmpfile(); open(MAKEFILE, "> $m1"); binmode(MAKEFILE); -print MAKEFILE "FOO = foo \\\r\nbar\nall: ; \@echo \$(FOO)\n"; +print MAKEFILE "FOO = foo \\\r\n"; close(MAKEFILE); -run_make_with_options($m1, '', get_logfile()); +my $m2 = get_tmpfile(); +open(MAKEFILE, "> $m2"); +print MAKEFILE "include $m1\ndefine BAR\nall: ; \@echo \$(FOO) bar\nendef\n\$(eval \$(BAR))\n"; +close(MAKEFILE); + +run_make_with_options($m2, '', get_logfile()); compare_output("foo bar\n", get_logfile(1)); |