From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tobias Zawada Subject: Bug: Infinite recursion in org-babel-get-src-block-info [9.1.13 (9.1.13-elpaplus @ mixed installation! Date: Tue, 4 Dec 2018 17:45:34 +0100 (CET) Message-ID: <93868713.269034.1543941934831@email.ionos.de> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:40236) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gUDpM-0004a5-Qk for emacs-orgmode@gnu.org; Tue, 04 Dec 2018 11:45:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gUDpJ-0005XQ-Nu for emacs-orgmode@gnu.org; Tue, 04 Dec 2018 11:45:40 -0500 Received: from mout.kundenserver.de ([212.227.126.133]:33251) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gUDpJ-0005Vq-DD for emacs-orgmode@gnu.org; Tue, 04 Dec 2018 11:45:37 -0500 Received: from oxbaltgw65.schlund.de ([172.19.246.152]) by mrelayeu.kundenserver.de (mreue012 [213.165.67.97]) with ESMTPSA (Nemesis) id 1Mi4un-1h7yQg0WfZ-00e8v5 for ; Tue, 04 Dec 2018 17:45:35 +0100 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org I mostly cite here from https://emacs.stackexchange.com/q/41208/2370: The following example causes an infinite recursion in ~org-babel-get-src-block-info~. #+BEGIN_SRC org ,#+BEGIN_SRC org ,#+NAME: add3 ,#+BEGIN_SRC elisp :var num=0 (+ 3 num) ,#+END_SRC ,* Use function drawer header arg :PROPERTIES: :header-args: :var n=add3(5) :END: ,#+NAME: whatIsN ,#+BEGIN_SRC sh echo $n ,#+END_SRC ,#+RESULTS: whatIsN : 8 ,#+BEGIN_SRC sh :var a=whatIsN echo $a ,#+END_SRC #+END_SRC The problem is located in org-babel-get-src-block-info. The function org-babel-params-from-properties is used there. Its doc-string is: Retrieve parameters specified as properties. Return a list of association lists of source block params specified in the properties of the current outline entry. But they do not say what the current outline entry is. In org-babel-get-src-block-info they assumed that the current outline entry would be that one at point but org-babel-params-from-properties uses also org-babel-current-src-block-location to retrieve parameters from there. Even if (point) is 1 for the first source block add3 the variable org-babel-current-src-block-location in org-babel-params-from-properties points to the source block whatIsN. So not the header-args for add3 are collected by org-babel-params-from-properties but those of whatIsN. The consequence is that add3 gets the header arg n=add3(5) from the drawer. Naturally, that leads to infinite recursion. The funny thing is that they already tried to make sure that org-babel-params-from-properties gets the right header args from the location of datum. I cite a small section of org-babel-get-src-block-info: ;; If DATUM is provided, make sure we get node ;; properties applicable to its location within ;; the document. (org-with-point-at (org-element-property :begin datum) (org-babel-params-from-properties lang)) You can avoid the error if you additionally let-bind org-babel-current-src-block-location to the location of datum: ;; If DATUM is provided, make sure we get node ;; properties applicable to its location within ;; the document. (let ((org-babel-current-src-block-location (org-element-property :begin datum))) (org-with-point-at org-babel-current-src-block-location (org-babel-params-from-properties lang))) I am not sure about the full consequences of that change through.