Add new file textsec-check.el

* lisp/international/textsec-check.el: New file.
* lisp/international/textsec.el
(textsec-email-address-header-suspicious-p): Rename.
This commit is contained in:
Lars Ingebrigtsen 2022-01-19 16:22:16 +01:00
parent 598038643f
commit 00a6946283
3 changed files with 78 additions and 6 deletions

View file

@ -0,0 +1,67 @@
;;; textsec-check.el --- Check for suspicious texts -*- lexical-binding: t; -*-
;; Copyright (C) 2022 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;;; Code:
(defgroup textsec nil
"Suspicious text identification."
:group 'security
:version "29.1")
(defcustom textsec-check t
"If non-nil, perform some checks on certain texts.
If nil, these checks are disabled."
:type 'boolean
:version "29.1")
(defface textsec-suspicious
'((t (:weight bold :background "red")))
"Face used to highlight suspicious strings.")
;;;###autoload
(defun textsec-check (string type)
"Test whether STRING is suspicious when considered as TYPE.
If STRING is suspicious, text properties will be added to the
string to mark it as suspicious, and with tooltip texts that says
what's suspicious about it.
Available types include `domain', `local-address', `name',
`email-address', and `email-address-headers'.
If the `textsec-check' user option is nil, these checks are disabled."
(if (not textsec-check)
string
(require 'textsec)
(let ((func (intern (format "textsec-%s-suspicious-p" type))))
(unless (fboundp func)
(error "%s is not a valid function" func))
(let ((warning (funcall func string)))
(if (not warning)
string
(propertize string
'face 'textsec-suspicious
'help-echo warning))))))
(provide 'textsec-check)
;;; textsec-check.el ends here

View file

@ -344,7 +344,7 @@ and `textsec-domain-suspicious-p'."
(textsec-domain-suspicious-p domain)
(textsec-local-address-suspicious-p local))))
(defun textsec-email-suspicious-p (email)
(defun textsec-email-address-header-suspicious-p (email)
"Say whether EMAIL looks suspicious.
If it isn't, return nil. If it is, return a string explaining the
potential problem.

View file

@ -149,14 +149,19 @@
(ert-deftest test-suspicious-email ()
(should-not
(textsec-email-suspicious-p "Lars Ingebrigtsen <larsi@gnus.org>"))
(textsec-email-address-header-suspicious-p
"Lars Ingebrigtsen <larsi@gnus.org>"))
(should
(textsec-email-suspicious-p "LÅrs Ingebrigtsen <larsi@gnus.org>"))
(textsec-email-address-header-suspicious-p
"LÅrs Ingebrigtsen <larsi@gnus.org>"))
(should
(textsec-email-suspicious-p "Lars Ingebrigtsen <.larsi@gnus.org>"))
(textsec-email-address-header-suspicious-p
"Lars Ingebrigtsen <.larsi@gnus.org>"))
(should
(textsec-email-suspicious-p "Lars Ingebrigtsen <larsi@gn\N{LEFT-TO-RIGHT ISOLATE}us.org>"))
(textsec-email-address-header-suspicious-p
"Lars Ingebrigtsen <larsi@gn\N{LEFT-TO-RIGHT ISOLATE}us.org>"))
(should (textsec-email-suspicious-p "דגבא <foo@bar.com>")))
(should (textsec-email-address-header-suspicious-p
"דגבא <foo@bar.com>")))
;;; textsec-tests.el ends here