summaryrefslogtreecommitdiff
path: root/lisp/international
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/international')
-rw-r--r--lisp/international/textsec.el25
1 files changed, 21 insertions, 4 deletions
diff --git a/lisp/international/textsec.el b/lisp/international/textsec.el
index 223c0d5c92f..adef64bfdf0 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)