diff --git a/lib/Twig/Extension/Core.php b/lib/Twig/Extension/Core.php index ef3657698..b34728c1d 100644 --- a/lib/Twig/Extension/Core.php +++ b/lib/Twig/Extension/Core.php @@ -692,7 +692,16 @@ function twig_array_merge($arr1, $arr2) function twig_slice(Twig_Environment $env, $item, $start, $length = null, $preserveKeys = false) { if ($item instanceof Traversable) { - $item = iterator_to_array($item, false); + + if ($item instanceof IteratorAggregate) { + $item = $item->getIterator(); + } + + if ($start >= 0 && $length >= 0) { + return iterator_to_array(new LimitIterator($item, $start, $length), $preserveKeys); + } + + $item = iterator_to_array($item, $preserveKeys); } if (is_array($item)) {