bug72489.phpt 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. --TEST--
  2. Bug #72489 (PHP Crashes When Modifying Array Containing MySQLi Result Data)
  3. --EXTENSIONS--
  4. mysqli
  5. --SKIPIF--
  6. <?php
  7. require_once('skipifconnectfailure.inc');
  8. ?>
  9. --FILE--
  10. <?php
  11. require_once("connect.inc");
  12. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
  13. printf("[001] Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
  14. }
  15. if (!$link->query("DROP TABLE IF EXISTS bug72489")) {
  16. printf("[002] [%d] %s\n", $link->errno, $link->error);
  17. }
  18. if (!$link->query("CREATE TABLE bug72489 (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, code VARCHAR(30) NOT NULL)")) {
  19. printf("[003] [%d] %s\n", $link->errno, $link->error);
  20. }
  21. $seedSQL = "INSERT INTO bug72489 (`code`) VALUES ('code1'), ('code2'), ('code3');";
  22. if (!$link->query($seedSQL)) {
  23. printf("[004] [%d] %s\n", $link->errno, $link->error);
  24. }
  25. $subRow = array();
  26. if (!$stmt = $link->prepare("SELECT id, code FROM bug72489")) {
  27. printf("[005] [%d] %s\n", $link->errno, $link->error);
  28. }
  29. $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
  30. if (!$stmt->bind_result($subRow['id'], $subRow['code']) || !$stmt->execute()) {
  31. printf("[006] [%d] %s\n", $link->errno, $link->error);
  32. }
  33. while ($stmt->fetch()) {
  34. $testArray = array('id' => 1);
  35. $subRow['code'] = $testArray;
  36. }
  37. echo "Finished 1\n";
  38. $newArray = array();
  39. echo "Finished 2\n";
  40. ?>
  41. --CLEAN--
  42. <?php
  43. require_once("connect.inc");
  44. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
  45. printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
  46. if (!mysqli_query($link, "DROP TABLE IF EXISTS bug72489"))
  47. printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  48. mysqli_close($link);
  49. ?>
  50. --EXPECT--
  51. Finished 1
  52. Finished 2