]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't error when comparing IPv4 and IPv6 addresses
authorRobert Pluim <rpluim@gmail.com>
Mon, 18 Nov 2019 09:57:55 +0000 (10:57 +0100)
committerRobert Pluim <rpluim@gmail.com>
Tue, 19 Nov 2019 12:36:07 +0000 (13:36 +0100)
* lisp/net/nsm.el (nsm-network-same-subnet): Compare lengths of
local-ip and ip; different lengths can never match.
(nsm-should-check): Chop port off end of address.

lisp/net/nsm.el

index c47ef55a6f4daf64e9302221db3aefac23d1066f..205b7974883f843d8528eaf904ecb4d491ae11bf 100644 (file)
@@ -204,17 +204,21 @@ LOCAL-IP, MASK, and IP are specified as vectors of integers, and
 are expected to have the same length.  Works for both IPv4 and
 IPv6 addresses."
   (let ((matches t)
-        (length (length local-ip)))
-    (unless (memq length '(4 5 8 9))
+        (ip-length (length ip))
+        (local-length (length local-ip)))
+    (unless (and (memq ip-length '(4 5 8 9))
+                 (memq local-length '(4 5 8 9)))
       (error "Unexpected length of IP address %S" local-ip))
-    (dotimes (i length)
-      (setq matches (and matches
-                         (=
-                          (logand (aref local-ip i)
-                                  (aref mask i))
-                          (logand (aref ip i)
-                                  (aref mask i))))))
-    matches))
+    (if (/= ip-length local-length)
+        nil
+        (dotimes (i local-length)
+          (setq matches (and matches
+                             (=
+                              (logand (aref local-ip i)
+                                      (aref mask i))
+                              (logand (aref ip i)
+                                      (aref mask i))))))
+        matches)))
 
 (defun nsm-should-check (host)
   "Determine whether NSM should check for TLS problems for HOST.
@@ -238,7 +242,7 @@ otherwise."
              (when
                  (nsm-network-same-subnet (substring (car info) 0 -1)
                                           (substring (car (cddr info)) 0 -1)
-                                          address)
+                                          (substring address 0 -1))
                (setq off-net nil))))
          network-interface-list))
       addresses))