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. --EXPECTF--
  45. Warning: Creating default object from empty value in %s%eissue_250_001.php on line 9
  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===