Browse Source

org-element: Prevent parsing meta-data after blank lines

* lisp/org-element.el (org-element--current-element): Check that
  planning info and property drawers are correctly located before
  parsing them.

* testing/lisp/test-org-element.el (test-org-element/planning-parser):
(test-org-element/property-drawer-parser): Add tests.
Nicolas Goaziou 8 years ago
parent
commit
9f98979ff0
2 changed files with 15 additions and 1 deletions
  1. 5 1
      lisp/org-element.el
  2. 10 0
      testing/lisp/test-org-element.el

+ 5 - 1
lisp/org-element.el

@@ -3845,10 +3845,14 @@ element it has to parse."
 	 (or (save-excursion (org-with-limited-levels (outline-next-heading)))
 	     limit)))
        ;; Planning.
-       ((and (eq mode 'planning) (looking-at org-planning-line-re))
+       ((and (eq mode 'planning)
+	     (eq ?* (char-after (line-beginning-position 0)))
+	     (looking-at org-planning-line-re))
 	(org-element-planning-parser limit))
        ;; Property drawer.
        ((and (memq mode '(planning property-drawer))
+	     (eq ?* (char-after (line-beginning-position
+				 (if (eq mode 'planning) 0 -1))))
 	     (looking-at org-property-drawer-re))
 	(org-element-property-drawer-parser limit))
        ;; When not at bol, point is at the beginning of an item or

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

@@ -1971,6 +1971,11 @@ Outside list"
    (eq 'planning
        (org-test-with-temp-text
 	   "* H\n# Comment\n<point>DEADLINE: <2012-03-29 thu.>"
+	 (org-element-type (org-element-at-point)))))
+  (should-not
+   (eq 'planning
+       (org-test-with-temp-text
+	   "* H\n\n<point>DEADLINE: <2012-03-29 thu.>"
 	 (org-element-type (org-element-at-point))))))
 
 
@@ -2013,6 +2018,11 @@ Outside list"
        (org-test-with-temp-text
 	   "* H\nParagraph\n<point>:PROPERTIES:\nparagraph\n:END:"
 	 (org-element-type (org-element-at-point)))))
+  (should-not
+   (eq 'property-drawer
+       (org-test-with-temp-text
+	   "* H\n\n<point>:PROPERTIES:\n:prop: value\n:END:"
+	 (org-element-type (org-element-at-point)))))
   ;; Handle non-empty blank line at the end of buffer.
   (should
    (org-test-with-temp-text "* H\n<point>:PROPERTIES:\n:END:\n "