emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master ebe0bda: Don't attempt to recover from undefined be


From: Philipp Stephani
Subject: [Emacs-diffs] master ebe0bda: Don't attempt to recover from undefined behavior in some cases
Date: Sat, 27 May 2017 09:31:03 -0400 (EDT)

branch: master
commit ebe0bdae9ded4eab974faefb54a6ba5260523489
Author: Philipp Stephani <address@hidden>
Commit: Philipp Stephani <address@hidden>

    Don't attempt to recover from undefined behavior in some cases
    
    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 |  8 ++++++++
 lisp/emacs-lisp/ert.el      | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 6c12e5d..12a7d4a 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -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
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index 280b76a..2c49a63 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]