1--TEST-- 2Bug #41069 (Oracle crash with certain data over a DB-link when prefetch memory limit used - Oracle bug 6039623) 3--SKIPIF-- 4<?php 5$target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs 6require(__DIR__.'/skipif.inc'); 7if (empty($dbase)) die ("skip requires network connection alias for DB link loopback"); 8if ($test_drcp) die("skip DRCP does not support shared database links"); 9?> 10--INI-- 11oci8.default_prefetch=5 12--FILE-- 13 <?php 14 15 require(__DIR__.'/connect.inc'); 16 17// Initialization 18 19$stmtarray = array( 20 "alter session set nls_date_format = 'MM/DD/YYYY'", 21 22 "drop database link bug41069_dblink", 23 24 "drop table bug41069_tab", 25 26 "create shared database link bug41069_dblink authenticated by $user identified by $password using '$dbase'", 27 28 "create table bug41069_tab 29 ( 30 c1 number(20), 31 c2 varchar2(60 byte), 32 c3 varchar2(1000 byte), 33 c4 varchar2(255 byte), 34 c5 varchar2(2 byte), 35 c6 varchar2(1 byte), 36 c7 varchar2(255 byte), 37 c8 varchar2(50 byte), 38 c9 date, 39 c10 date, 40 c12 number(20), 41 c13 varchar2(20 byte), 42 c15 varchar2(50 byte) 43 )", 44 45 "insert into bug41069_tab (c1, c2, c5, c6, c9, c10, c12, c15) values 46 (111, 'aaaaaaa', 'b', 'c', '01/17/2008', '01/07/2017', 2222, 'zzzzzzzzzz')", 47 48 "insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c13, c15) values 49 (112, 'aaaaaaa', 'bbbbbbbb', 'ccccccc', 'd', 'e', 'rrrrrrr', '04/16/2007', '04/16/2007', 2223, 'xxxxxxxx', 'zzzzzzzz')", 50 51 "insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c15) values 52 (113, 'aaaaaaa', 'bbbbbbbbbb', 'cccccc', 'e', 'f', 'dddd', '12/04/2006', '12/04/2006', 2224, 'zzzzzzz')" 53); 54 55oci8_test_sql_execute($c, $stmtarray); 56 57 58// Run Tests 59 60echo "Test 1: non-DB link case that always worked\n"; 61$stid = oci_parse($c, 'select * from bug41069_tab order by c1'); 62oci_execute($stid, OCI_DEFAULT); 63oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW); 64var_dump($results); 65 66echo "Test 2: Should not crash\n"; 67$stid = oci_parse($c, 'select * from bug41069_tab@bug41069_dblink order by c1'); 68oci_execute($stid, OCI_DEFAULT); 69oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW); 70var_dump($results); 71 72// Cleanup 73 74$c = oci_new_connect($user, $password, $dbase); 75 76$stmtarray = array( 77 "drop database link bug41069_dblink", 78 "drop table bug41069_tab" 79); 80 81oci8_test_sql_execute($c, $stmtarray); 82 83echo "Done\n"; 84 85?> 86--EXPECT-- 87Test 1: non-DB link case that always worked 88array(3) { 89 [0]=> 90 array(13) { 91 ["C1"]=> 92 string(3) "111" 93 ["C2"]=> 94 string(7) "aaaaaaa" 95 ["C3"]=> 96 NULL 97 ["C4"]=> 98 NULL 99 ["C5"]=> 100 string(1) "b" 101 ["C6"]=> 102 string(1) "c" 103 ["C7"]=> 104 NULL 105 ["C8"]=> 106 NULL 107 ["C9"]=> 108 string(10) "01/17/2008" 109 ["C10"]=> 110 string(10) "01/07/2017" 111 ["C12"]=> 112 string(4) "2222" 113 ["C13"]=> 114 NULL 115 ["C15"]=> 116 string(10) "zzzzzzzzzz" 117 } 118 [1]=> 119 array(13) { 120 ["C1"]=> 121 string(3) "112" 122 ["C2"]=> 123 string(7) "aaaaaaa" 124 ["C3"]=> 125 string(8) "bbbbbbbb" 126 ["C4"]=> 127 string(7) "ccccccc" 128 ["C5"]=> 129 string(1) "d" 130 ["C6"]=> 131 string(1) "e" 132 ["C7"]=> 133 string(7) "rrrrrrr" 134 ["C8"]=> 135 NULL 136 ["C9"]=> 137 string(10) "04/16/2007" 138 ["C10"]=> 139 string(10) "04/16/2007" 140 ["C12"]=> 141 string(4) "2223" 142 ["C13"]=> 143 string(8) "xxxxxxxx" 144 ["C15"]=> 145 string(8) "zzzzzzzz" 146 } 147 [2]=> 148 array(13) { 149 ["C1"]=> 150 string(3) "113" 151 ["C2"]=> 152 string(7) "aaaaaaa" 153 ["C3"]=> 154 string(10) "bbbbbbbbbb" 155 ["C4"]=> 156 string(6) "cccccc" 157 ["C5"]=> 158 string(1) "e" 159 ["C6"]=> 160 string(1) "f" 161 ["C7"]=> 162 string(4) "dddd" 163 ["C8"]=> 164 NULL 165 ["C9"]=> 166 string(10) "12/04/2006" 167 ["C10"]=> 168 string(10) "12/04/2006" 169 ["C12"]=> 170 string(4) "2224" 171 ["C13"]=> 172 NULL 173 ["C15"]=> 174 string(7) "zzzzzzz" 175 } 176} 177Test 2: Should not crash 178array(3) { 179 [0]=> 180 array(13) { 181 ["C1"]=> 182 string(3) "111" 183 ["C2"]=> 184 string(7) "aaaaaaa" 185 ["C3"]=> 186 NULL 187 ["C4"]=> 188 NULL 189 ["C5"]=> 190 string(1) "b" 191 ["C6"]=> 192 string(1) "c" 193 ["C7"]=> 194 NULL 195 ["C8"]=> 196 NULL 197 ["C9"]=> 198 string(10) "01/17/2008" 199 ["C10"]=> 200 string(10) "01/07/2017" 201 ["C12"]=> 202 string(4) "2222" 203 ["C13"]=> 204 NULL 205 ["C15"]=> 206 string(10) "zzzzzzzzzz" 207 } 208 [1]=> 209 array(13) { 210 ["C1"]=> 211 string(3) "112" 212 ["C2"]=> 213 string(7) "aaaaaaa" 214 ["C3"]=> 215 string(8) "bbbbbbbb" 216 ["C4"]=> 217 string(7) "ccccccc" 218 ["C5"]=> 219 string(1) "d" 220 ["C6"]=> 221 string(1) "e" 222 ["C7"]=> 223 string(7) "rrrrrrr" 224 ["C8"]=> 225 NULL 226 ["C9"]=> 227 string(10) "04/16/2007" 228 ["C10"]=> 229 string(10) "04/16/2007" 230 ["C12"]=> 231 string(4) "2223" 232 ["C13"]=> 233 string(8) "xxxxxxxx" 234 ["C15"]=> 235 string(8) "zzzzzzzz" 236 } 237 [2]=> 238 array(13) { 239 ["C1"]=> 240 string(3) "113" 241 ["C2"]=> 242 string(7) "aaaaaaa" 243 ["C3"]=> 244 string(10) "bbbbbbbbbb" 245 ["C4"]=> 246 string(6) "cccccc" 247 ["C5"]=> 248 string(1) "e" 249 ["C6"]=> 250 string(1) "f" 251 ["C7"]=> 252 string(4) "dddd" 253 ["C8"]=> 254 NULL 255 ["C9"]=> 256 string(10) "12/04/2006" 257 ["C10"]=> 258 string(10) "12/04/2006" 259 ["C12"]=> 260 string(4) "2224" 261 ["C13"]=> 262 NULL 263 ["C15"]=> 264 string(7) "zzzzzzz" 265 } 266} 267Done 268