From 7958d685522e6f38522813c65bdd28685ee1784f Mon Sep 17 00:00:00 2001 From: Christian Humer <christian.humer@oracle.com> Date: Mon, 4 Jan 2016 19:50:41 +0100 Subject: [PATCH] Fix missing check for vector length in delete list. --- .../vector/CachedReplaceVectorNode.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java index e97deb7996..c13c5c004b 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java @@ -555,19 +555,21 @@ final class CachedReplaceVectorNode extends CachedVectorNode { } int resultIndex = 0; - for (int i = 0; i < vectorLength; i++) { - Object element = vector.getDataAtAsObject(i); - if (element != DELETE_MARKER) { - data[resultIndex] = element; - if (hasNames) { - newNames[resultIndex] = names.getDataAt(i); - } - resultIndex++; - if (isPreviousResultSpecialized() && resultIndex > resultLength) { - // got too many elements - CompilerDirectives.transferToInterpreterAndInvalidate(); - previousResultLength = PREVIOUS_RESULT_GENERIC; - return deleteElements(vector, vectorLength); + if (resultLength > 0) { + for (int i = 0; i < vectorLength; i++) { + Object element = vector.getDataAtAsObject(i); + if (element != DELETE_MARKER) { + data[resultIndex] = element; + if (hasNames) { + newNames[resultIndex] = names.getDataAt(i); + } + resultIndex++; + if (isPreviousResultSpecialized() && resultIndex > resultLength) { + // got too many elements + CompilerDirectives.transferToInterpreterAndInvalidate(); + previousResultLength = PREVIOUS_RESULT_GENERIC; + return deleteElements(vector, vectorLength); + } } } } -- GitLab