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