issue_250_001.phpt 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. #[AllowDynamicProperties]
  8. class TestObject {
  9. private $data = [];
  10. private $meta = [];
  11. public function setTitle($title) {
  12. $this->a->b->title = $title;
  13. }
  14. public function getData() {
  15. return $this->data;
  16. }
  17. public function getMeta() {
  18. return $this->meta;
  19. }
  20. public function setData($data=[]) {
  21. $this->data = $data;
  22. }
  23. public function setMeta($meta) {
  24. return;
  25. }
  26. }
  27. $v8 = new V8Js("server");
  28. $code = <<< EOT
  29. var v1 = server.response.getData();
  30. var v2 = server.response.getMeta();
  31. server.response.setData({});
  32. server.response.setTitle("ouch");
  33. server.response.setMeta({});
  34. EOT;
  35. $response = new TestObject();
  36. $v8->response = $response;
  37. try {
  38. $result = $v8->executeString($code);
  39. var_dump($v8->response);
  40. } catch (V8JsException $e) {
  41. var_dump($e);
  42. }
  43. ?>
  44. ===EOF===
  45. --EXPECTF--
  46. Fatal error: Uncaught Error: Attempt to modify property "b" on null in %s%eissue_250_001.php:10
  47. Stack trace:
  48. #0 [internal function]: TestObject->setTitle('ouch')
  49. #1 %s%eissue_250_001.php(45): V8Js->executeString(' var v1 = se...')
  50. #2 {main}
  51. thrown in %s%eissue_250_001.php on line 10