xref: /php-src/ext/pgsql/tests/bug71998.phpt (revision c15988aa)
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