Преглед изворни кода

element: Fix drawer parsing

* lisp/org-element.el (org-element-drawer-parser): A single ":END:"
line should not be recognized as a drawer.
* testing/lisp/test-org-element.el (test-org-element/drawer-parser):
Add test.

Reported-by: Ihor Radchenko <yantar92@gmail.com>
<http://lists.gnu.org/r/emacs-orgmode/2021-05/msg00819.html>
Nicolas Goaziou пре 3 година
родитељ
комит
8846ea71fa
2 измењених фајлова са 6 додато и 1 уклоњено
  1. 3 1
      lisp/org-element.el
  2. 3 0
      testing/lisp/test-org-element.el

+ 3 - 1
lisp/org-element.el

@@ -737,7 +737,9 @@ Return a list whose CAR is `drawer' and CDR is a plist containing
 
 Assume point is at beginning of drawer."
   (let ((case-fold-search t))
-    (if (not (save-excursion (re-search-forward "^[ \t]*:END:[ \t]*$" limit t)))
+    (if (not (save-excursion
+               (goto-char (min limit (line-end-position)))
+               (re-search-forward "^[ \t]*:END:[ \t]*$" limit t)))
 	;; Incomplete drawer: parse it as a paragraph.
 	(org-element-paragraph-parser limit affiliated)
       (save-excursion

+ 3 - 0
testing/lisp/test-org-element.el

@@ -662,6 +662,9 @@ Some other text
   (should-not
    (org-test-with-temp-text ":TEST:"
      (org-element-map (org-element-parse-buffer) 'drawer 'identity nil t)))
+  (should-not
+   (org-test-with-temp-text ":END:"
+     (org-element-map (org-element-parse-buffer) 'drawer 'identity nil t)))
   ;; Handle non-empty blank line at the end of buffer.
   (should
    (org-test-with-temp-text ":TEST:\nC\n:END:\n "