diff options
| author | Mattias EngdegÄrd | 2022-04-11 16:22:38 +0200 |
|---|---|---|
| committer | Mattias EngdegÄrd | 2022-04-11 16:29:24 +0200 |
| commit | 26db1ca80e459a640cc6648fb7f94c873def3ddd (patch) | |
| tree | a369bdcd5d121dd2740b7d9764be2390332e5f58 /lisp | |
| parent | a715f2fbe70bb4cbb961e82af95e2965030b4513 (diff) | |
| download | emacs-26db1ca80e459a640cc6648fb7f94c873def3ddd.tar.gz emacs-26db1ca80e459a640cc6648fb7f94c873def3ddd.zip | |
Recognise hybrid IPv6/IPv4 addresses in textsec (bug#54624)
* lisp/international/textsec.el (textsec--ipvx-address-p):
Recognise hybrid addresses like "::ffff:129.55.2.201".
Combine to a single regexp and translate to rx.
Remove some regexp ambiguity (relint complaint).
* test/lisp/international/textsec-tests.el (test-suspiction-domain):
Add test cases.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/international/textsec.el | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lisp/international/textsec.el b/lisp/international/textsec.el index cca49986fc4..3e787909384 100644 --- a/lisp/international/textsec.el +++ b/lisp/international/textsec.el | |||
| @@ -233,12 +233,18 @@ The scripts are as defined by the Unicode Standard Annex 24 (UAX#24)." | |||
| 233 | 233 | ||
| 234 | (defun textsec--ipvx-address-p (domain) | 234 | (defun textsec--ipvx-address-p (domain) |
| 235 | "Return non-nil if DOMAIN is an ipv4 or ipv6 address." | 235 | "Return non-nil if DOMAIN is an ipv4 or ipv6 address." |
| 236 | (or (string-match-p "\\`\\([0-9]\\{1,3\\}\\.?\\)\\{1,4\\}\\'" domain) | 236 | ;; This is a very relaxed pattern for IPv4 or IPv6 addresses. The |
| 237 | (let ((ipv6 "\\([0-9a-f]\\{0,4\\}:?\\)\\{1,8\\}")) | 237 | ;; assumption is that any malformed address accepted by this rule |
| 238 | ;; With brackets. | 238 | ;; will be rejected by the actual address parser eventually. |
| 239 | (or (string-match-p (format "\\`\\[%s\\]\\'" ipv6) domain) | 239 | (rx-let ((ipv4 (** 1 4 |
| 240 | ;; Without. | 240 | (** 1 3 (in "0-9")) |
| 241 | (string-match-p (format "\\`%s\\'" ipv6) domain))))) | 241 | (? "."))) |
| 242 | (ipv6 (: (** 1 7 | ||
| 243 | (** 0 4 (in "0-9a-f")) | ||
| 244 | ":") | ||
| 245 | (** 0 4 (in "0-9a-f")) | ||
| 246 | (? ":" ipv4)))) | ||
| 247 | (string-match-p (rx bos (or ipv4 ipv6 (: "[" ipv6 "]")) eos) domain))) | ||
| 242 | 248 | ||
| 243 | (defun textsec-domain-suspicious-p (domain) | 249 | (defun textsec-domain-suspicious-p (domain) |
| 244 | "Say whether DOMAIN's name looks suspicious. | 250 | "Say whether DOMAIN's name looks suspicious. |