]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't attempt to recover from undefined behavior in some cases
authorPhilipp Stephani <phst@google.com>
Sat, 27 May 2017 12:39:01 +0000 (14:39 +0200)
committerPhilipp Stephani <phst@google.com>
Sat, 27 May 2017 13:30:19 +0000 (15:30 +0200)
These functions can only be run in batch mode and exit Emacs on
return, so nothing can be recovered.  Disable unsafe recover
mechanisms so that we get real failures and good stack traces on
fatal signals.

* lisp/emacs-lisp/bytecomp.el (batch-byte-compile)
(batch-byte-recompile-directory):
* lisp/emacs-lisp/ert.el (ert-run-tests-batch-and-exit)
(ert-summarize-tests-batch-and-exit): Don't attempt to recover
from undefined behavior.

lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/ert.el

index 6c12e5d8e25221f8b2c6a283c6934d5f80726825..12a7d4afc2a468459f737cabd2861de98444ba33 100644 (file)
@@ -4960,6 +4960,10 @@ already up-to-date."
   (defvar command-line-args-left)      ;Avoid 'free variable' warning
   (if (not noninteractive)
       (error "`batch-byte-compile' is to be used only with -batch"))
+  ;; Better crash loudly than attempting to recover from undefined
+  ;; behavior.
+  (setq attempt-stack-overflow-recovery nil
+        attempt-orderly-shutdown-on-fatal-signal nil)
   (let ((error nil))
     (while command-line-args-left
       (if (file-directory-p (expand-file-name (car command-line-args-left)))
@@ -5052,6 +5056,10 @@ and corresponding effects."
   (defvar command-line-args-left)      ;Avoid 'free variable' warning
   (if (not noninteractive)
       (error "batch-byte-recompile-directory is to be used only with -batch"))
+  ;; Better crash loudly than attempting to recover from undefined
+  ;; behavior.
+  (setq attempt-stack-overflow-recovery nil
+        attempt-orderly-shutdown-on-fatal-signal nil)
   (or command-line-args-left
       (setq command-line-args-left '(".")))
   (while command-line-args-left
index 280b76acfe495c08690b20f68c01079236253b0a..2c49a634e35bc0f4c8f32a1031f48f97e7897d69 100644 (file)
@@ -1458,6 +1458,12 @@ The exit status will be 0 if all test results were as expected, 1
 on unexpected results, or 2 if the tool detected an error outside
 of the tests (e.g. invalid SELECTOR or bug in the code that runs
 the tests)."
+  (or noninteractive
+      (user-error "This function is only for use in batch mode"))
+  ;; Better crash loudly than attempting to recover from undefined
+  ;; behavior.
+  (setq attempt-stack-overflow-recovery nil
+        attempt-orderly-shutdown-on-fatal-signal nil)
   (unwind-protect
       (let ((stats (ert-run-tests-batch selector)))
         (kill-emacs (if (zerop (ert-stats-completed-unexpected stats)) 0 1)))
@@ -1475,6 +1481,10 @@ The logfiles should have the `ert-run-tests-batch' format.  When finished,
 this exits Emacs, with status as per `ert-run-tests-batch-and-exit'."
   (or noninteractive
       (user-error "This function is only for use in batch mode"))
+  ;; Better crash loudly than attempting to recover from undefined
+  ;; behavior.
+  (setq attempt-stack-overflow-recovery nil
+        attempt-orderly-shutdown-on-fatal-signal nil)
   (let ((nlogs (length command-line-args-left))
         (ntests 0) (nrun 0) (nexpected 0) (nunexpected 0) (nskipped 0)
         nnotrun logfile notests badtests unexpected skipped)