changeset 110625:0e33b506a2f1

* emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Avoid infinite recursion on erroneous lambda form. (Bug#7114)
author Andreas Schwab <schwab@linux-m68k.org>
date Mon, 27 Sep 2010 19:14:58 +0200
parents cf68fbaebcfe
children 38ea535309d8
files lisp/ChangeLog lisp/emacs-lisp/byte-opt.el
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon Sep 27 15:27:54 2010 +0200
+++ b/lisp/ChangeLog	Mon Sep 27 19:14:58 2010 +0200
@@ -1,3 +1,8 @@
+2010-09-27  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Avoid
+	infinite recursion on erroneous lambda form.  (Bug#7114)
+
 2010-09-27  Kenichi Handa  <handa@m17n.org>
 
 	* tar-mode.el (tar-header-block-tokenize): Decode filenames in
--- a/lisp/emacs-lisp/byte-opt.el	Mon Sep 27 15:27:54 2010 +0200
+++ b/lisp/emacs-lisp/byte-opt.el	Mon Sep 27 19:14:58 2010 +0200
@@ -381,9 +381,11 @@
 		form))
 	  ((or (byte-code-function-p fn)
 	       (eq 'lambda (car-safe fn)))
-           (byte-optimize-form-code-walker
-            (byte-compile-unfold-lambda form)
-            for-effect))
+	   (let ((newform (byte-compile-unfold-lambda form)))
+	     (if (eq newform form)
+		 ;; Some error occured, avoid infinite recursion
+		 form
+	       (byte-optimize-form-code-walker newform for-effect))))
 	  ((memq fn '(let let*))
 	   ;; recursively enter the optimizer for the bindings and body
 	   ;; of a let or let*.  This for depth-firstness: forms that