emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/beardbolt 1cc069a121 132/323: Quote filenames before pa


From: ELPA Syncer
Subject: [elpa] externals/beardbolt 1cc069a121 132/323: Quote filenames before passing them as shell arguments
Date: Thu, 9 Mar 2023 10:58:24 -0500 (EST)

branch: externals/beardbolt
commit 1cc069a121d676422eeb4f20e65b893c7120d708
Author: Jay Kamat <jaygkamat@gmail.com>
Commit: Jay Kamat <jaygkamat@gmail.com>

    Quote filenames before passing them as shell arguments
---
 rmsbolt.el | 245 ++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 135 insertions(+), 110 deletions(-)

diff --git a/rmsbolt.el b/rmsbolt.el
index b0d3f10eea..6223a647bb 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -196,7 +196,8 @@ Please DO NOT modify this blindly, as this directory will 
get deleted on Emacs e
 (defun rmsbolt-output-filename (src-buffer &optional asm)
   "Function for generating an output filename for SRC-BUFFER.
 
-Outputs assembly file if ASM."
+Outputs assembly file if ASM.
+This function does NOT quote the return value for use in inferior shells."
   (if (and (not asm)
            (buffer-local-value 'rmsbolt-disassemble src-buffer))
       (expand-file-name "rmsbolt.out" rmsbolt--temp-dir)
@@ -313,94 +314,111 @@ Generally not useful with the sole exception of the 
emacs lisp disassembler.
 This function is responsible for calling `rmsbolt--handle-finish-compile'
 Please be careful when setting this, as it bypasses most logic and is 
generally not useful."))
 
+(defmacro rmsbolt--with-files (src-buffer &rest body)
+  "Execute BODY with `src-filename' and `output-filename' defined.
+Args taken from SRC-BUFFER.
+Return value is quoted for passing to the shell."
+  `(let ((src-filename (shell-quote-argument
+                        (buffer-file-name)))
+         (output-filename
+          (shell-quote-argument
+           (rmsbolt-output-filename ,src-buffer))))
+     ,@body))
 
 (cl-defun rmsbolt--c-compile-cmd (&key src-buffer)
   "Process a compile command for gcc/clang."
-  (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
-         (cmd (mapconcat #'identity
-                         (list cmd
-                               "-g"
-                               (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
-                                   ""
-                                 "-S")
-                               (buffer-file-name)
-                               "-o" (rmsbolt-output-filename src-buffer)
-                               (when (buffer-local-value 'rmsbolt-intel-x86 
src-buffer)
-                                 "-masm=intel"))
-                         " ")))
-    cmd))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (cmd (mapconcat #'identity
+                          (list cmd
+                                "-g"
+                                (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
+                                    ""
+                                  "-S")
+                                src-filename
+                                "-o" output-filename
+                                (when (buffer-local-value 'rmsbolt-intel-x86 
src-buffer)
+                                  "-masm=intel"))
+                          " ")))
+     cmd)))
 (cl-defun rmsbolt--ocaml-compile-cmd (&key src-buffer)
   "Process a compile command for ocaml.
 
   Needed as ocaml cannot output asm to a non-hardcoded file"
-  (let* ((diss (buffer-local-value 'rmsbolt-disassemble src-buffer))
-         (output-filename (rmsbolt-output-filename src-buffer))
-         (predicted-asm-filename (concat (file-name-sans-extension 
(buffer-file-name)) ".s"))
-         (cmd (buffer-local-value 'rmsbolt-command src-buffer))
-         (cmd (mapconcat #'identity
-                         (list cmd
-                               "-g"
-                               (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
-                                   ""
-                                 "-S")
-                               (buffer-file-name)
-                               (mapconcat #'identity
-                                          (cond
-                                           (diss
-                                            (list "-o" output-filename))
-                                           ((equal predicted-asm-filename 
output-filename)
-                                            nil)
-                                           (t
-                                            (list "&&" "mv"
-                                                  (concat 
(file-name-sans-extension (buffer-file-name))
-                                                          ".s")
-                                                  output-filename)))
-                                          " "))
-                         " ")))
-    cmd))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((diss (buffer-local-value 'rmsbolt-disassemble src-buffer))
+          (predicted-asm-filename (shell-quote-argument
+                                   (concat (file-name-sans-extension 
(buffer-file-name)) ".s")))
+          (cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (cmd (mapconcat #'identity
+                          (list cmd
+                                "-g"
+                                (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
+                                    ""
+                                  "-S")
+                                src-filename
+                                (mapconcat #'identity
+                                           (cond
+                                            (diss
+                                             (list "-o" output-filename))
+                                            ((equal predicted-asm-filename 
output-filename)
+                                             nil)
+                                            (t
+                                             (list "&&" "mv"
+                                                   predicted-asm-filename
+                                                   output-filename)))
+                                           " "))
+                          " ")))
+     cmd)))
 (cl-defun rmsbolt--lisp-compile-cmd (&key src-buffer)
   "Process a compile command for common lisp.
 
    Assumes function name to disassemble is 'main'."
-  (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
-         (interpreter (cl-first (split-string cmd nil t)))
-         (disass-eval "\"(disassemble 'main)\"")
-         (disass-eval-unquoted "(disassemble 'main)"))
-    (pcase interpreter
-      ("sbcl"
-       (mapconcat #'identity
-                  (list cmd "--noinform" "--load"
-                        (buffer-file-name)
-                        "--eval" disass-eval "--non-interactive"
-                        ;; Remove leading comments
-                        "|" "sed" "'s/^;\s//'" ">"
-                        (rmsbolt-output-filename src-buffer))
-                  " "))
-      ("clisp"
-       (mapconcat #'identity
-                  (list cmd "-q" "-x"
-                        (concat
-                         "\"(load \\\"" (buffer-file-name) "\\\") " 
disass-eval-unquoted "\"")
-                        ">" (rmsbolt-output-filename src-buffer))
-                  " "))
-      (_
-       (error "This Common Lisp interpreter is not supported")))))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (interpreter (cl-first (split-string cmd nil t)))
+          (disass-eval "\"(disassemble 'main)\"")
+          (disass-eval-unquoted "(disassemble 'main)"))
+     (pcase interpreter
+       ("sbcl"
+        (mapconcat #'identity
+                   (list cmd "--noinform" "--load"
+                         src-filename
+                         "--eval" disass-eval "--non-interactive"
+                         ;; Remove leading comments
+                         "|" "sed" "'s/^;\s//'" ">"
+                         output-filename)
+                   " "))
+       ("clisp"
+        (mapconcat #'identity
+                   (list cmd "-q" "-x"
+                         (concat
+                          "\"(load \\\"" src-filename "\\\") " 
disass-eval-unquoted "\"")
+                         ">" output-filename)
+                   " "))
+       (_
+        (error "This Common Lisp interpreter is not supported"))))))
 (cl-defun rmsbolt--rust-compile-cmd (&key src-buffer)
   "Process a compile command for rustc."
-  (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
-         (cmd (mapconcat #'identity
-                         (list cmd
-                               "-g"
-                               "--emit"
-                               (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
-                                   "link"
-                                 "asm")
-                               (buffer-file-name)
-                               "-o" (rmsbolt-output-filename src-buffer)
-                               (when (buffer-local-value 'rmsbolt-intel-x86 
src-buffer)
-                                 "-Cllvm-args=--x86-asm-syntax=intel"))
-                         " ")))
-    cmd))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (cmd (mapconcat #'identity
+                          (list cmd
+                                "-g"
+                                "--emit"
+                                (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
+                                    "link"
+                                  "asm")
+                                src-filename
+                                "-o" output-filename
+                                (when (buffer-local-value 'rmsbolt-intel-x86 
src-buffer)
+                                  "-Cllvm-args=--x86-asm-syntax=intel"))
+                          " ")))
+     cmd)))
 (cl-defun rmsbolt--pony-compile-cmd (&key src-buffer)
   "Process a compile command for ponyc."
   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
@@ -411,8 +429,8 @@ Please be careful when setting this, as it bypasses most 
logic and is generally
          ;;                  (buffer-file-name))))
          (base-filename "pony")
          (base-filename (expand-file-name base-filename dir))
-         (asm-filename (concat base-filename ".s"))
-         (object-filename (concat base-filename ".o"))
+         (asm-filename (shell-quote-argument (concat base-filename ".s")))
+         (object-filename (shell-quote-argument (concat base-filename ".o")))
          ;; TODO should we copy this in lisp here, or pass this to the 
compilation command?
          (_ (copy-file (buffer-file-name)
                        (expand-file-name dir) t))
@@ -429,7 +447,8 @@ Please be careful when setting this, as it bypasses most 
logic and is generally
                           dir
                           "&&" "mv"
                           (if dis object-filename asm-filename)
-                          (rmsbolt-output-filename src-buffer))
+                          (shell-quote-argument
+                           (rmsbolt-output-filename src-buffer)))
                          " ")))
     (with-current-buffer src-buffer
       (setq-local rmsbolt--real-src-file
@@ -439,44 +458,50 @@ Please be careful when setting this, as it bypasses most 
logic and is generally
     cmd))
 (cl-defun rmsbolt--py-compile-cmd (&key src-buffer)
   "Process a compile command for python3."
-  (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer)))
-    (mapconcat #'identity
-               (list cmd "-m" "dis" (buffer-file-name)
-                     ">" (rmsbolt-output-filename src-buffer))
-               " ")))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer)))
+     (mapconcat #'identity
+                (list cmd "-m" "dis" src-filename
+                      ">" output-filename)
+                " "))))
 
 (cl-defun rmsbolt--hs-compile-cmd (&key src-buffer)
   "Process a compile command for ghc."
-  (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
-         (cmd (mapconcat #'identity
-                         (list cmd
-                               "-g"
-                               (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
-                                   ""
-                                 "-S")
-                               (buffer-file-name)
-                               "-o" (rmsbolt-output-filename src-buffer))
-                         " ")))
-    cmd))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (cmd (mapconcat #'identity
+                          (list cmd
+                                "-g"
+                                (if (buffer-local-value 'rmsbolt-disassemble 
src-buffer)
+                                    ""
+                                  "-S")
+                                src-filename
+                                "-o" output-filename)
+                          " ")))
+     cmd)))
 (cl-defun rmsbolt--java-compile-cmd (&key src-buffer)
   "Process a compile command for ocaml.
 
   Needed as ocaml cannot output asm to a non-hardcoded file"
-  (let* ((output-filename (rmsbolt-output-filename src-buffer))
-         (class-filename (concat (file-name-sans-extension (buffer-file-name)) 
".class"))
-         (cmd (buffer-local-value 'rmsbolt-command src-buffer))
-         (cmd (mapconcat #'identity
-                         (list cmd
-                               "-g"
-                               (buffer-file-name)
-                               "&&"
-                               "javap"
-                               "-c" "-l"
-                               class-filename
-                               ">"
-                               output-filename)
-                         " ")))
-    cmd))
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((class-filename (shell-quote-argument
+                           (concat (file-name-sans-extension 
(buffer-file-name)) ".class")))
+          (cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (cmd (mapconcat #'identity
+                          (list cmd
+                                "-g"
+                                src-filename
+                                "&&"
+                                "javap"
+                                "-c" "-l"
+                                class-filename
+                                ">"
+                                output-filename)
+                          " ")))
+     cmd)))
 
 (cl-defun rmsbolt--elisp-compile-override (&key src-buffer)
   (let ((file-name (buffer-file-name)))



reply via email to

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