svn commit: r216806 - head/bin/sh
Jilles Tjoelker
jilles at FreeBSD.org
Wed Dec 29 19:39:52 UTC 2010
Author: jilles
Date: Wed Dec 29 19:39:51 2010
New Revision: 216806
URL: http://svn.freebsd.org/changeset/base/216806
Log:
sh: Properly restore exception handler in fc.
If SIGINT arrived at exactly the right moment (unlikely), an exception
handler in a no longer active stack frame would be called.
Because the old handler was not used in the normal path, clang thought it
was a dead value and if an exception happened it would longjmp() to garbage.
This caused builtins/fc1.0 to fail if histedit.c was compiled with clang.
MFC after: 1 week
Modified:
head/bin/sh/histedit.c
Modified: head/bin/sh/histedit.c
==============================================================================
--- head/bin/sh/histedit.c Wed Dec 29 18:17:36 2010 (r216805)
+++ head/bin/sh/histedit.c Wed Dec 29 19:39:51 2010 (r216806)
@@ -232,6 +232,7 @@ histcmd(int argc, char **argv)
}
argc -= optind, argv += optind;
+ savehandler = handler;
/*
* If executing...
*/
@@ -242,7 +243,6 @@ histcmd(int argc, char **argv)
* Catch interrupts to reset active counter and
* cleanup temp files.
*/
- savehandler = handler;
if (setjmp(jmploc.loc)) {
active = 0;
if (editfile)
@@ -399,6 +399,7 @@ histcmd(int argc, char **argv)
--active;
if (displayhist)
displayhist = 0;
+ handler = savehandler;
return 0;
}
More information about the svn-src-head
mailing list