Fix ietf-drums-remove-whitespace unmatched " and (
* lisp/mail/ietf-drums.el: + (ietf-drums-skip-comment): New helper function. + (ietf-drums-remove-comments): Use ietf-drums-skip-comment. + (ietf-drums-remove-whitespace): Handle unterminated quotes and comments, as ietf-drums-remove-comments already does. * test/lisp/mail/ietf-drums-tests.el: + Test unterminated quote and comment for ietf-drums-remove-whitespace and ietf-drums-remove-comments (bug#53965).
This commit is contained in:
parent
ae13948ff5
commit
51d44fd705
2 changed files with 36 additions and 10 deletions
|
@ -65,6 +65,21 @@ backslash and doublequote.")
|
|||
(modify-syntax-entry ?\' "_" table)
|
||||
table))
|
||||
|
||||
(defvar ietf-drums-comment-syntax-table
|
||||
(let ((table (copy-syntax-table ietf-drums-syntax-table)))
|
||||
(modify-syntax-entry ?\" "w" table)
|
||||
table)
|
||||
"In comments, DQUOTE is normal and does not start a string.")
|
||||
|
||||
(defun ietf-drums--skip-comment ()
|
||||
;; From just before the start of a comment, go to the end. Returns
|
||||
;; point. If the comment is unterminated, go to point-max.
|
||||
(condition-case ()
|
||||
(with-syntax-table ietf-drums-comment-syntax-table
|
||||
(forward-sexp 1))
|
||||
(scan-error (goto-char (point-max))))
|
||||
(point))
|
||||
|
||||
(defun ietf-drums-token-to-list (token)
|
||||
"Translate TOKEN into a list of characters."
|
||||
(let ((i 0)
|
||||
|
@ -109,14 +124,7 @@ backslash and doublequote.")
|
|||
(forward-sexp 1)
|
||||
(error (goto-char (point-max)))))
|
||||
((eq c ?\()
|
||||
(delete-region
|
||||
(point)
|
||||
(condition-case nil
|
||||
(with-syntax-table (copy-syntax-table ietf-drums-syntax-table)
|
||||
(modify-syntax-entry ?\" "w")
|
||||
(forward-sexp 1)
|
||||
(point))
|
||||
(error (point-max)))))
|
||||
(delete-region (point) (ietf-drums--skip-comment)))
|
||||
(t
|
||||
(forward-char 1))))
|
||||
(buffer-string))))
|
||||
|
@ -130,9 +138,11 @@ backslash and doublequote.")
|
|||
(setq c (char-after))
|
||||
(cond
|
||||
((eq c ?\")
|
||||
(forward-sexp 1))
|
||||
(condition-case ()
|
||||
(forward-sexp 1)
|
||||
(scan-error (goto-char (point-max)))))
|
||||
((eq c ?\()
|
||||
(forward-sexp 1))
|
||||
(ietf-drums--skip-comment))
|
||||
((memq c '(?\ ?\t ?\n ?\r))
|
||||
(delete-char 1))
|
||||
(t
|
||||
|
|
|
@ -40,6 +40,16 @@
|
|||
(should (equal (ietf-drums-remove-comments
|
||||
"random (first) (second (and)) (third) not fourth")
|
||||
"random not fourth"))
|
||||
;; Test some unterminated comments.
|
||||
(should (equal (ietf-drums-remove-comments "test an (unterminated comment")
|
||||
"test an "))
|
||||
(should (equal (ietf-drums-remove-comments "test an \"unterminated quote")
|
||||
;; returns the string unchanged (and doesn't barf).
|
||||
"test an \"unterminated quote"))
|
||||
(should (equal (ietf-drums-remove-comments
|
||||
;; note that double-quote is not special.
|
||||
"test (unterminated comments with \"quoted (\" )stuff")
|
||||
"test "))
|
||||
|
||||
;; ietf-drums-remove-whitespace
|
||||
(should (equal (ietf-drums-remove-whitespace "random string")
|
||||
|
@ -53,6 +63,12 @@
|
|||
(should (equal (ietf-drums-remove-whitespace
|
||||
"random (first) (second (and)) (third) not fourth")
|
||||
"random(first)(second (and))(third)notfourth"))
|
||||
;; Test some unterminated comments and quotes.
|
||||
(should (equal (ietf-drums-remove-whitespace
|
||||
"random (first) (second (and)) (third unterminated")
|
||||
"random(first)(second (and))(third unterminated"))
|
||||
(should (equal (ietf-drums-remove-whitespace "random \"non terminated string")
|
||||
"random\"non terminated string"))
|
||||
|
||||
;; ietf-drums-strip
|
||||
(should (equal (ietf-drums-strip "random string") "randomstring"))
|
||||
|
|
Loading…
Add table
Reference in a new issue