HTMLPurifier/AttrDef/URI/IPv6.php Quellcode

IPv6.php
gehe zur Dokumentation dieser Datei
1 <?php
2 
10 {
11 
18  public function validate($aIP, $config, $context)
19  {
20  if (!$this->ip4) {
21  $this->_loadRegex();
22  }
23 
24  $original = $aIP;
25 
26  $hex = '[0-9a-fA-F]';
27  $blk = '(?:' . $hex . '{1,4})';
28  $pre = '(?:/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))'; // /0 - /128
29 
30  // prefix check
31  if (strpos($aIP, '/') !== false) {
32  if (preg_match('#' . $pre . '$#s', $aIP, $find)) {
33  $aIP = substr($aIP, 0, 0 - strlen($find[0]));
34  unset($find);
35  } else {
36  return false;
37  }
38  }
39 
40  // IPv4-compatiblity check
41  if (preg_match('#(?<=:' . ')' . $this->ip4 . '$#s', $aIP, $find)) {
42  $aIP = substr($aIP, 0, 0 - strlen($find[0]));
43  $ip = explode('.', $find[0]);
44  $ip = array_map('dechex', $ip);
45  $aIP .= $ip[0] . $ip[1] . ':' . $ip[2] . $ip[3];
46  unset($find, $ip);
47  }
48 
49  // compression check
50  $aIP = explode('::', $aIP);
51  $c = count($aIP);
52  if ($c > 2) {
53  return false;
54  } elseif ($c == 2) {
55  list($first, $second) = $aIP;
56  $first = explode(':', $first);
57  $second = explode(':', $second);
58 
59  if (count($first) + count($second) > 8) {
60  return false;
61  }
62 
63  while (count($first) < 8) {
64  array_push($first, '0');
65  }
66 
67  array_splice($first, 8 - count($second), 8, $second);
68  $aIP = $first;
69  unset($first, $second);
70  } else {
71  $aIP = explode(':', $aIP[0]);
72  }
73  $c = count($aIP);
74 
75  if ($c != 8) {
76  return false;
77  }
78 
79  // All the pieces should be 16-bit hex strings. Are they?
80  foreach ($aIP as $piece) {
81  if (!preg_match('#^[0-9a-fA-F]{4}$#s', sprintf('%04s', $piece))) {
82  return false;
83  }
84  }
85  return $original;
86  }
87 }
88 
89 // vim: et sw=4 sts=4




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.