[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 51d44fd705: Fix ietf-drums-remove-whitespace unmatched " and (
From: |
Lars Ingebrigtsen |
Subject: |
master 51d44fd705: Fix ietf-drums-remove-whitespace unmatched " and ( |
Date: |
Sun, 13 Feb 2022 03:33:15 -0500 (EST) |
branch: master
commit 51d44fd705a2779beeb3fe1d59af88caadbc247a
Author: Bob Rogers <rogers@rgrjr.com>
Commit: Lars Ingebrigtsen <larsi@gnus.org>
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).
---
lisp/mail/ietf-drums.el | 30 ++++++++++++++++++++----------
test/lisp/mail/ietf-drums-tests.el | 16 ++++++++++++++++
2 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/lisp/mail/ietf-drums.el b/lisp/mail/ietf-drums.el
index db77aba172..85aa27235f 100644
--- a/lisp/mail/ietf-drums.el
+++ b/lisp/mail/ietf-drums.el
@@ -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
diff --git a/test/lisp/mail/ietf-drums-tests.el
b/test/lisp/mail/ietf-drums-tests.el
index 4cc38b8763..b13937bf73 100644
--- a/test/lisp/mail/ietf-drums-tests.el
+++ b/test/lisp/mail/ietf-drums-tests.el
@@ -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"))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 51d44fd705: Fix ietf-drums-remove-whitespace unmatched " and (,
Lars Ingebrigtsen <=