[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)))
- [elpa] externals/beardbolt 47e9fa1f59 112/323: Update README, (continued)
- [elpa] externals/beardbolt 47e9fa1f59 112/323: Update README, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt c6831044c6 092/323: Update README, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 5c5e0e35db 115/323: Add prototype support for emacs lisp bytecode, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 032b3d8eef 107/323: Add melpa badge, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt d1b0f7c2ba 118/323: Fix compilation warnings, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 0ed6a01cd1 119/323: Fix initial run of emacs-lisp disassembler, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 77842a5f78 126/323: Add elisp support to docs, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt c00d09a850 122/323: Use hashtables instead of lists as sets for labels used, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt c009c2df44 130/323: Trim left side of strings to activate 'starting with period' opt, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 9e38f2238b 135/323: Add support for functions as arguments to :compile-cmd, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 1cc069a121 132/323: Quote filenames before passing them as shell arguments,
ELPA Syncer <=
- [elpa] externals/beardbolt 495d481a94 136/323: Move rmsbolt-command initialization to end, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 39055a3dc4 133/323: Fix disassembly of partial files in C/C++, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 27e7bb714f 139/323: Add suppport for PHP, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 4b6abc5ef8 129/323: Optimize rmsbolt-process-src-asm-lines, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 67238e0272 138/323: Add rmsbolt-default-directory customization, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 9b2c85397c 149/323: Add texinfo version of docs, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt ec99a1aa31 146/323: Attempt to fix whitespace clearing on hot recompiles, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 5e389a88d9 152/323: Add rmsbolt splitter for splitting and mutating commands, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 0fbc3d3f09 153/323: Enable compile_commands.json parsing for c/cpp, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 743f9a68ec 158/323: Handle non absolute .file paths, ELPA Syncer, 2023/03/09