[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 682b6df6bf: Improve detection of suspicious uses of bidi controls
From: |
Eli Zaretskii |
Subject: |
master 682b6df6bf: Improve detection of suspicious uses of bidi controls |
Date: |
Sat, 22 Jan 2022 05:00:11 -0500 (EST) |
branch: master
commit 682b6df6bfc7af98a28b54bd925cd33dead2c25d
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Improve detection of suspicious uses of bidi controls
* lisp/international/textsec.el
(textsec-bidi-controls-suspicious-p): New function.
(textsec-name-suspicious-p): Use it.
* test/lisp/international/textsec-tests.el (test-suspicious-name):
Enable the test that was previously failing with
'bidi-find-overridden-directionality'.
---
lisp/international/textsec.el | 25 +++++++++++++++++++++----
test/lisp/international/textsec-tests.el | 6 ++----
2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/lisp/international/textsec.el b/lisp/international/textsec.el
index 223c0d5c92..adef64bfdf 100644
--- a/lisp/international/textsec.el
+++ b/lisp/international/textsec.el
@@ -287,6 +287,22 @@ certain other unusual mixtures of characters."
((string-match-p "\\`\\.\\|\\.\\'\\|\\.\\." local)
(format "`%s' contains invalid dots" local))))
+(defun textsec-bidi-controls-suspicious-p (string)
+ "Return non-nil of STRING uses bidi controls in suspicious ways.
+If STRING doesn't include any suspicious uses of bidirectional
+formatting control characters, return nil. Otherwise, return the
+index of the first character in STRING affected by such suspicious
+use of bidi controls. If the returned value is beyond the length
+of STRING, it means any text following STRING on display might be
+affected by bidi controls in STRING."
+ (with-temp-buffer
+ ;; We add a string that's representative of some text that could
+ ;; follow STRING, with the purpose of detecting residual bidi
+ ;; state at end of STRING which could then affect the following
+ ;; text.
+ (insert string "a1א:!")
+ (bidi-find-overridden-directionality 1 (point-max) nil)))
+
(defun textsec-name-suspicious-p (name)
"Say whether NAME looks suspicious.
NAME is (for instance) the free-text display name part of an
@@ -310,10 +326,11 @@ other unusual mixtures of characters."
?\N{arabic letter mark})))))
name)
;; We have bidirectional formatting characters, but check
- ;; whether they affect LTR characters. If not, it's not
- ;; suspicious.
- (bidi-find-overridden-directionality 0 (length name) name))
- (format "The string contains bidirectional control characters"))
+ ;; whether they affect any other characters in suspicious
+ ;; ways. If not, NAME is not suspicious.
+ (fixnump (textsec-bidi-controls-suspicious-p name)))
+ (format "`%s' contains suspicious uses of bidirectional control characters"
+ name))
((textsec-suspicious-nonspacing-p name))))
(defun textsec-suspicious-nonspacing-p (string)
diff --git a/test/lisp/international/textsec-tests.el
b/test/lisp/international/textsec-tests.el
index c3c7e9b59a..ee0af66d99 100644
--- a/test/lisp/international/textsec-tests.el
+++ b/test/lisp/international/textsec-tests.el
@@ -136,10 +136,8 @@
(should (textsec-name-suspicious-p "LÅRS INGEBRIGTSEN"))
(should-not (textsec-name-suspicious-p "LÅRS INGEBRIGTSEN"))
- ;;; FIXME -- this test fail with `bidi-find-overridden-directionality'.
- (when nil
- (should (textsec-name-suspicious-p
- "Lars Ingebrigtsen\N{LEFT-TO-RIGHT OVERRIDE}")))
+ (should (textsec-name-suspicious-p
+ "Lars Ingebrigtsen\N{LEFT-TO-RIGHT OVERRIDE}"))
(should (textsec-name-suspicious-p
"Lars Ingebrigtsen\N{LEFT-TO-RIGHT OVERRIDE}f"))
(should-not (textsec-name-suspicious-p
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 682b6df6bf: Improve detection of suspicious uses of bidi controls,
Eli Zaretskii <=