emacs-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]