Tcl Library Source Code

Hex Artifact Content
Login
Bounty program for improvements to Tcl and certain Tcl packages.

Artifact 927b8447a3cb4dbbf87deff48cd3f8e90675676b9abf845f2ffa6636a171dce0:

Attachment "make_ip_version_and_mask_more_strict.diff" to ticket [b1c2d07148] added by buzzdeee 2019-06-13 11:56:15. (unpublished)
0000: 2d 2d 2d 20 69 70 2e 74 63 6c 2e 6f 72 69 67 09  --- ip.tcl.orig.
0010: 54 68 75 20 4a 75 6e 20 31 33 20 31 33 3a 31 35  Thu Jun 13 13:15
0020: 3a 35 36 20 32 30 31 39 0a 2b 2b 2b 20 69 70 2e  :56 2019.+++ ip.
0030: 74 63 6c 09 54 68 75 20 4a 75 6e 20 31 33 20 31  tcl.Thu Jun 13 1
0040: 33 3a 35 31 3a 31 39 20 32 30 31 39 0a 40 40 20  3:51:19 [email protected]@ 
0050: 2d 36 36 2c 39 20 2b 36 36 2c 32 36 20 40 40 0a  -66,9 +66,26 @@.
0060: 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b 61 64       foreach {ad
0070: 64 72 20 6d 61 73 6b 7d 20 5b 73 70 6c 69 74 20  dr mask} [split 
0080: 24 69 70 20 2f 5d 20 62 72 65 61 6b 0a 20 20 20  $ip /] break.   
0090: 20 20 69 66 20 7b 5b 49 50 76 34 3f 20 24 61 64    if {[IPv4? $ad
00a0: 64 72 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  dr]} {.         
00b0: 73 65 74 20 76 65 72 73 69 6f 6e 20 34 0a 2b 20  set version 4.+ 
00c0: 20 20 20 20 20 20 20 73 65 74 20 6d 61 78 6c 65         set maxle
00d0: 6e 20 33 32 0a 20 20 20 20 20 7d 20 65 6c 73 65  n 32.     } else
00e0: 69 66 20 7b 5b 49 50 76 36 3f 20 24 61 64 64 72  if {[IPv6? $addr
00f0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 73 65  ]} {.         se
0100: 74 20 76 65 72 73 69 6f 6e 20 36 0a 2b 20 20 20  t version 6.+   
0110: 20 20 20 20 20 73 65 74 20 6d 61 78 6c 65 6e 20       set maxlen 
0120: 31 32 38 0a 20 20 20 20 20 7d 0a 2b 20 20 20 20  128.     }.+    
0130: 69 66 20 7b 20 22 22 20 21 3d 20 24 6d 61 73 6b  if { "" != $mask
0140: 20 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 69 66   } {.+        if
0150: 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74   {[string is int
0160: 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d 61  eger -strict $ma
0170: 73 6b 5d 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20  sk]} {.+        
0180: 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20    switch -exact 
0190: 24 76 65 72 73 69 6f 6e 20 7b 0a 2b 20 20 20 20  $version {.+    
01a0: 20 20 20 20 20 20 20 20 20 20 34 20 7b 0a 2b 20            4 {.+ 
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01c0: 20 20 20 69 66 20 7b 24 6d 61 73 6b 20 3c 20 30     if {$mask < 0
01d0: 20 7c 7c 20 24 6d 61 73 6b 20 3e 20 33 32 7d 20   || $mask > 32} 
01e0: 7b 20 72 65 74 75 72 6e 20 2d 31 20 7d 0a 2b 20  { return -1 }.+ 
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0200: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .+              
0210: 36 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20  6 {.+           
0220: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 6d 61           if {$ma
0230: 73 6b 20 3c 20 30 20 7c 7c 20 24 6d 61 73 6b 20  sk < 0 || $mask 
0240: 3e 20 31 32 38 7d 20 7b 20 72 65 74 75 72 6e 20  > 128} { return 
0250: 2d 31 20 7d 0a 2b 20 20 20 20 20 20 20 20 20 20  -1 }.+          
0260: 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 20 20        }.+       
0270: 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 20 7d 20     }.+        } 
0280: 65 6c 73 65 20 7b 0a 2b 20 20 20 20 20 20 20 20  else {.+        
0290: 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0a 2b 20      return -1.+ 
02a0: 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 7d 0a         }.+    }.
02b0: 2b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 24 76  +.     return $v
02c0: 65 72 73 69 6f 6e 0a 20 7d 0a 20 20 20 20 20 20  ersion. }.      
02d0: 20 20 20 0a 40 40 20 2d 33 33 37 2c 36 20 2b 33     [email protected]@ -337,6 +3
02e0: 35 34 2c 31 30 20 40 40 0a 20 7d 0a 20 0a 20 70  54,10 @@. }. . p
02f0: 72 6f 63 20 3a 3a 69 70 3a 3a 6d 61 73 6b 20 7b  roc ::ip::mask {
0300: 69 70 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 76  ip} {.+    set v
0310: 65 72 73 69 6f 6e 20 5b 76 65 72 73 69 6f 6e 20  ersion [version 
0320: 24 69 70 5d 0a 2b 20 20 20 20 69 66 20 7b 20 2d  $ip].+    if { -
0330: 31 20 3d 3d 20 24 76 65 72 73 69 6f 6e 20 7d 20  1 == $version } 
0340: 7b 0a 2b 20 20 20 20 20 20 72 65 74 75 72 6e 20  {.+      return 
0350: 24 76 65 72 73 69 6f 6e 0a 2b 20 20 20 20 7d 0a  $version.+    }.
0360: 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b 61 64       foreach {ad
0370: 64 72 20 6d 61 73 6b 7d 20 5b 73 70 6c 69 74 20  dr mask} [split 
0380: 24 69 70 20 2f 5d 20 62 72 65 61 6b 0a 20 20 20  $ip /] break.   
0390: 20 20 72 65 74 75 72 6e 20 24 6d 61 73 6b 0a 20    return $mask. 
03a0: 7d 0a                                            }.