From dfe13482a8b3997aaca35063e81c7535faf02c0b Mon Sep 17 00:00:00 2001 From: Nick Dokos Date: Sat, 28 Sep 2024 15:39:25 -0400 Subject: [PATCH] org-babel: Avoid changing user options by not sharing list structure * lisp/ob-core.el (org-babel-get-src-block-info): Use `copy-tree' when using `org-babel-default-header-args*' variables to prepare the `info' variable used in src block evaluation. The `info' variable gets modified, and the modifications were affecting the values of the user variables. In particular, the `:file' setting was modified in the presence of a `:output-dir' setting, concatenating more and more copies of the directory every time the block was evaluated. Reported-by: @lyndhurst on SE Emacs Link: https://emacs.stackexchange.com/questions/82261/ --- lisp/ob-core.el | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 90c52f8b7836..e6db422c9d20 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -731,9 +731,17 @@ Otherwise, return a list with the following pattern: lang (org-babel--normalize-body datum) (apply #'org-babel-merge-params - (if inline org-babel-default-inline-header-args - org-babel-default-header-args) - (and (boundp lang-headers) (eval lang-headers t)) + ;; Use `copy-tree' to avoid creating shared structure + ;; with the `org-babel-default-header-args-*' variables: + ;; modifications by `org-babel-generate-file-param' + ;; below would modify the shared structure, thereby + ;; modifying the variables. + (copy-tree + (if inline org-babel-default-inline-header-args + org-babel-default-header-args) + t) + (and (boundp lang-headers) + (copy-tree (eval lang-headers t) t)) (append ;; If DATUM is provided, make sure we get node ;; properties applicable to its location within -- 2.46.0