Annotation of embedaddon/php/ext/mysqli/tests/bug49442.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Bug #49422 (mysqlnd: mysqli_real_connect() and LOAD DATA INFILE crash)
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifconnectfailure.inc');
7:
8: $link = mysqli_init();
9: if (!my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket)) {
10: die(sprintf("skip Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));
11: }
12:
13: include_once("local_infile_tools.inc");
14: if ($msg = check_local_infile_support($link, $engine))
15: die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error));
16:
17: mysqli_close($link);
18: ?>
19: --INI--
20: mysqli.allow_local_infile=1
21: mysqli.allow_persistent=1
22: mysqli.max_persistent=1
23: --FILE--
24: <?php
25: include ("connect.inc");
26:
27: $link = mysqli_init();
28: if (!my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket)) {
29: printf("[001] Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
30: }
31:
32: if (!mysqli_query($link, 'DROP TABLE IF EXISTS test')) {
33: printf("[002] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link));
34: }
35:
36: if (!mysqli_query($link, 'CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine)) {
37: printf("[003] Failed to create test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link));
38: }
39:
40: include("local_infile_tools.inc");
41: $file = create_standard_csv(4);
42:
43: if (!@mysqli_query($link, sprintf("LOAD DATA LOCAL INFILE '%s'
44: INTO TABLE test
45: FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\''
46: LINES TERMINATED BY '\n'",
47: mysqli_real_escape_string($link, $file)))) {
48: printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
49: }
50:
51: if (!$res = mysqli_query($link, "SELECT * FROM test ORDER BY id"))
52: printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
53:
54: $rows = array();
55: while ($row = mysqli_fetch_assoc($res)) {
56: var_dump($row);
57: $rows[] = $row;
58: }
59:
60: mysqli_free_result($res);
61:
62: mysqli_query($link, "DELETE FROM test");
63: mysqli_close($link);
64:
65: if ($IS_MYSQLND) {
66: /*
67: mysqlnd makes a connection created through mysql_init()/mysqli_real_connect() always a 'persistent' one.
68: At this point 'persistent' is not to be confused with what a user calls a 'persistent' - in this case
69: 'persistent' means that mysqlnd uses malloc() instead of emalloc(). nothing else. ext/mysqli will
70: not consider it as a 'persistent' connection in a user sense, ext/mysqli will not appy max_persistent etc.
71: Its only about malloc() vs. emalloc().
72:
73: However, the bug is about malloc() and efree(). You can make make mysqlnd use malloc() by either using
74: pconnect or mysql_init() - so we should test pconnect as well..
75: */
76: $host = 'p:' . $host;
77: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
78: printf("[007] Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
79: }
80:
81: /* bug happened during query processing */
82: if (!@mysqli_query($link, sprintf("LOAD DATA LOCAL INFILE '%s'
83: INTO TABLE test
84: FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\''
85: LINES TERMINATED BY '\n'",
86: mysqli_real_escape_string($link, $file)))) {
87: printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
88: }
89:
90: /* we survived? that's good enough... */
91:
92: if (!$res = mysqli_query($link, "SELECT * FROM test ORDER BY id"))
93: printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
94:
95: $i = 0;
96: while ($row = mysqli_fetch_assoc($res)) {
97: if (($row['id'] != $rows[$i]['id']) || ($row['label'] != $rows[$i]['label'])) {
98: printf("[010] Wrong values, check manually!\n");
99: }
100: $i++;
101: }
102: mysqli_close($link);
103: }
104:
105: print "done!";
106: ?>
107: --CLEAN--
108: <?php
109: require_once("clean_table.inc");
110: ?>
111: --EXPECTF--
112: array(2) {
113: [%u|b%"id"]=>
114: %unicode|string%(2) "97"
115: [%u|b%"label"]=>
116: %unicode|string%(1) "x"
117: }
118: array(2) {
119: [%u|b%"id"]=>
120: %unicode|string%(2) "98"
121: [%u|b%"label"]=>
122: %unicode|string%(1) "y"
123: }
124: array(2) {
125: [%u|b%"id"]=>
126: %unicode|string%(2) "99"
127: [%u|b%"label"]=>
128: %unicode|string%(1) "z"
129: }
130: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>