bug65387.phpt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. --TEST--
  2. Bug #67387: Circular references in SPL iterators are not garbage collected
  3. --FILE--
  4. <?php
  5. $it = new ArrayIterator([1, 2, 3]);
  6. // Inner.
  7. $it[] = $it;
  8. // Callback
  9. $it2 = new CallbackFilterIterator($it, function($elem) use(&$it2) {
  10. return true;
  11. });
  12. // Callback object
  13. new class {
  14. public function __construct() {
  15. $it = new ArrayIterator([1, 2, 3]);
  16. $this->it = new CallbackFilterIterator($it, function($elem) {
  17. return true;
  18. });
  19. }
  20. };
  21. // Recursive callback
  22. $it = new RecursiveArrayIterator([1, 2, 3]);
  23. $it2 = new RecursiveCallbackFilterIterator($it, function($elem) use(&$it2) {
  24. return true;
  25. });
  26. // Cache
  27. $it = new ArrayIterator();
  28. $it2 = new CachingIterator($it, CachingIterator::FULL_CACHE);
  29. $it2['x'] = $it2;
  30. $it2->next();
  31. // Recursive cache
  32. $it = new RecursiveArrayIterator();
  33. $it2 = new RecursiveCachingIterator($it, CachingIterator::FULL_CACHE);
  34. $it2['x'] = $it2;
  35. $it2->next();
  36. // Append
  37. $it = new ArrayIterator();
  38. $it2 = new AppendIterator();
  39. $it[] = $it2;
  40. $it2->append($it);
  41. // Recursive iterator
  42. $it = new RecursiveArrayIterator([1, 2, 3]);
  43. $it2 = new RecursiveIteratorIterator($it);
  44. $it[] = $it2;
  45. // Recursive iterator at level>0.
  46. $it = new RecursiveArrayIterator([[1]]);
  47. $it2 = new RecursiveIteratorIterator($it);
  48. $it[] = $it2;
  49. $it2->next();
  50. ?>
  51. ===DONE===
  52. --EXPECT--
  53. ===DONE===