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.