1
0
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-11-21 06:55:35 +00:00

ox: Do not choke on incomplete OPTIONS items

* lisp/ox.el (org-export--parse-option-keyword): Prevent "End of
file during parsing" error when an OPTIONS item is incomplete.
* lisp/org-lint.el (org-lint-unknown-options-item): Check for
incomplete options items.
* testing/lisp/test-org-lint.el (test-org-lint/unknown-options-item):
Add test.
This commit is contained in:
Nicolas Goaziou 2021-04-09 22:47:57 +02:00
parent f99f26306c
commit 7116914427
3 changed files with 10 additions and 3 deletions

View File

@ -671,7 +671,7 @@ Use \"export %s\" instead"
(when (string= (org-element-property :key k) "OPTIONS")
(let ((value (org-element-property :value k))
(start 0))
(while (string-match "\\(.+?\\):\\((.*?)\\|\\S-*\\)[ \t]*"
(while (string-match "\\(.+?\\):\\((.*?)\\|\\S-+\\)?[ \t]*"
value
start)
(setf start (match-end 0))
@ -679,7 +679,11 @@ Use \"export %s\" instead"
(unless (member item allowed)
(push (list (org-element-property :post-affiliated k)
(format "Unknown OPTIONS item \"%s\"" item))
reports))))))))
reports))
(unless (match-string 2 value)
(push (list (org-element-property :post-affiliated k)
(format "Missing value for option item %S" item))
reports))))))))
reports))
(defun org-lint-invalid-macro-argument-and-template (ast)

View File

@ -1386,7 +1386,7 @@ e.g., `org-export-create-backend'. It specifies which back-end
specific items to read, if any."
(let ((line
(let ((s 0) alist)
(while (string-match "\\(.+?\\):\\((.*?)\\|\\S-*\\)[ \t]*" options s)
(while (string-match "\\(.+?\\):\\((.*?)\\|\\S-+\\)[ \t]*" options s)
(setq s (match-end 0))
(push (cons (match-string 1 options)
(read (match-string 2 options)))

View File

@ -313,6 +313,9 @@ This is not a node property
"Test `org-lint-unknown-options-item' checker."
(should
(org-test-with-temp-text "#+options: foobarbaz:t"
(org-lint '(unknown-options-item))))
(should
(org-test-with-temp-text "#+options: H:"
(org-lint '(unknown-options-item)))))
(ert-deftest test-org-lint/invalid-macro-argument-and-template ()