issue_250_001.phpt 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. --TEST--
  2. Test V8::executeString() : Issue #250 (early free of array)
  3. --SKIPIF--
  4. <?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
  5. --FILE--
  6. <?php
  7. class TestObject {
  8. private $data = [];
  9. private $meta = [];
  10. public function setTitle($title) {
  11. $this->a->b->title = $title;
  12. }
  13. public function getData() {
  14. return $this->data;
  15. }
  16. public function getMeta() {
  17. return $this->meta;
  18. }
  19. public function setData($data=[]) {
  20. $this->data = $data;
  21. }
  22. public function setMeta($meta) {
  23. return;
  24. }
  25. }
  26. $v8 = new V8Js("server");
  27. $code = <<< EOT
  28. var v1 = server.response.getData();
  29. var v2 = server.response.getMeta();
  30. server.response.setData({});
  31. server.response.setTitle("ouch");
  32. server.response.setMeta({});
  33. EOT;
  34. $response = new TestObject();
  35. $v8->response = $response;
  36. try {
  37. $result = $v8->executeString($code);
  38. var_dump($v8->response);
  39. } catch (V8JsException $e) {
  40. var_dump($e);
  41. }
  42. ?>
  43. ===EOF===
  44. --EXPECTREGEX--
  45. (?:Warning\: Creating default object from empty value in [^\r\n]+\/issue_250_001\.php on line 9\s*)+
  46. object\(TestObject\)\#\d+ \(3\) \{
  47. \["data"\:"TestObject"\:private\]\=\>
  48. object\(V8Object\)\#\d+ \(0\) \{
  49. \}
  50. \["meta"\:"TestObject"\:private\]\=\>
  51. array\(0\) \{
  52. \}
  53. \["a"\]\=\>
  54. object\(stdClass\)\#\d+ \(1\) \{
  55. \["b"\]\=\>
  56. object\(stdClass\)\#\d+ \(1\) \{
  57. \["title"\]\=\>
  58. string\(4\) "ouch"
  59. \}
  60. \}
  61. \}
  62. \=\=\=EOF\=\=\=