1--TEST-- 2Bug #71998 Function pg_insert does not insert when column type = inet 3--EXTENSIONS-- 4pgsql 5--SKIPIF-- 6<?php include("inc/skipif.inc"); ?> 7--FILE-- 8<?php 9// Kudos for the IP regex to 10// http://stackoverflow.com/a/17871737/3358424 11 12include('inc/config.inc'); 13$table_name = 'table_bug71998'; 14 15$db = pg_connect($conn_str); 16 17pg_query($db, "CREATE TABLE {$table_name} (id integer NOT NULL, remote_addr inet);"); 18 19$ips = array( 20 /* IPv4*/ 21 "127.0.0.1", 22 "10.0.0.1", 23 "192.168.1.1", 24 "0.0.0.0", 25 "255.255.255.255", 26 "192.168.1.35/24", 27 28 /* IPv6 */ 29 "::1", 30 "::10.2.3.4", 31 "::ffff:10.4.3.2", 32 "1:2:3:4:5:6:7:8", 33 "::ffff:10.0.0.1", 34 "::ffff:1.2.3.4", 35 "::ffff:0.0.0.0", 36 "1:2:3:4:5:6:77:88", 37 "::ffff:255.255.255.255", 38 "fe08::7:8", 39 "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 40 "::5:aef1:ffff/128", 41 "2001:4f8:3:ba::/112", 42 43); 44 45$bad = array( 46 /* bad */ 47 "256.257.258.259", 48 "fe08::7:8interface", 49 "schnitzel", 50 "10002.3.4", 51 "1.2.3.4.5", 52 "256.0.0.0", 53 "260.0.0.0", 54); 55 56$ips = array_merge($ips, $bad); 57$i = 0; 58$errors = 0; 59foreach ($ips as $ip) { 60 $data = array("id" => ++$i, "remote_addr" => $ip); 61 $r = true; 62 try { 63 @pg_insert($db, $table_name, $data); 64 } catch (\ValueError $e) { 65 echo $e->getMessage() . PHP_EOL; 66 $r = false; 67 } 68 69 if (!$r && in_array($ip, $bad)) { 70 $errors++; 71 //echo pg_last_error($db); 72 } 73 74 //pg_query($db, "INSERT INTO {$table_name} (id, remote_addr) VALUES (2, '127.0.0.1')"); // OK, record inserted 75} 76 77 78$r = pg_query($db, "SELECT * FROM {$table_name}"); 79while (false != ($row = pg_fetch_row($r))) { 80 var_dump($row); 81} 82echo $errors, " errors caught\n"; 83 84pg_close($db); 85 86?> 87--CLEAN-- 88<?php 89require_once('inc/config.inc'); 90$table_name = 'table_bug71998'; 91 92$db = @pg_connect($conn_str); 93 94pg_query($db, "DROP TABLE IF EXISTS {$table_name}"); 95?> 96--EXPECT-- 97pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "256.257.258.259" given 98pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "fe08::7:8interface" given 99pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "schnitzel" given 100pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "10002.3.4" given 101pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "1.2.3.4.5" given 102pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "256.0.0.0" given 103pg_insert(): Field "remote_addr" must be a valid IPv4 or IPv6 address string, "260.0.0.0" given 104array(2) { 105 [0]=> 106 string(1) "1" 107 [1]=> 108 string(9) "127.0.0.1" 109} 110array(2) { 111 [0]=> 112 string(1) "2" 113 [1]=> 114 string(8) "10.0.0.1" 115} 116array(2) { 117 [0]=> 118 string(1) "3" 119 [1]=> 120 string(11) "192.168.1.1" 121} 122array(2) { 123 [0]=> 124 string(1) "4" 125 [1]=> 126 string(7) "0.0.0.0" 127} 128array(2) { 129 [0]=> 130 string(1) "5" 131 [1]=> 132 string(15) "255.255.255.255" 133} 134array(2) { 135 [0]=> 136 string(1) "6" 137 [1]=> 138 string(15) "192.168.1.35/24" 139} 140array(2) { 141 [0]=> 142 string(1) "7" 143 [1]=> 144 string(3) "::1" 145} 146array(2) { 147 [0]=> 148 string(1) "8" 149 [1]=> 150 string(10) "::10.2.3.4" 151} 152array(2) { 153 [0]=> 154 string(1) "9" 155 [1]=> 156 string(15) "::ffff:10.4.3.2" 157} 158array(2) { 159 [0]=> 160 string(2) "10" 161 [1]=> 162 string(15) "1:2:3:4:5:6:7:8" 163} 164array(2) { 165 [0]=> 166 string(2) "11" 167 [1]=> 168 string(15) "::ffff:10.0.0.1" 169} 170array(2) { 171 [0]=> 172 string(2) "12" 173 [1]=> 174 string(14) "::ffff:1.2.3.4" 175} 176array(2) { 177 [0]=> 178 string(2) "13" 179 [1]=> 180 string(14) "::ffff:0.0.0.0" 181} 182array(2) { 183 [0]=> 184 string(2) "14" 185 [1]=> 186 string(17) "1:2:3:4:5:6:77:88" 187} 188array(2) { 189 [0]=> 190 string(2) "15" 191 [1]=> 192 string(22) "::ffff:255.255.255.255" 193} 194array(2) { 195 [0]=> 196 string(2) "16" 197 [1]=> 198 string(9) "fe08::7:8" 199} 200array(2) { 201 [0]=> 202 string(2) "17" 203 [1]=> 204 string(39) "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" 205} 206array(2) { 207 [0]=> 208 string(2) "18" 209 [1]=> 210 string(13) "::5:aef1:ffff" 211} 212array(2) { 213 [0]=> 214 string(2) "19" 215 [1]=> 216 string(19) "2001:4f8:3:ba::/112" 217} 2187 errors caught 219