Julian Ryan created OGNL-260:
--------------------------------
Summary: ArrayList Iterator Cursor set to Object Aray in OGNL
Key: OGNL-260
URL: https://issues.apache.org/jira/browse/OGNL-260
Project: Commons OGNL
Issue Type: Bug
Reporter: Julian Ryan
When running the following example in the latest (3.2.11):
{code:java}
import ognl.MemberAccess;
import ognl.Ognl;
import java.lang.reflect.Member;
import java.util.Map;
public class OgnlTest {
public static void main(String ... args) {
// Lazy allow everything for this test
Map ognlContext = Ognl.createDefaultContext(null, new MemberAccess() {
@Override
public Object setup(Map context, Object target, Member member, String
propertyName) {
return null;
}
@Override
public void restore(Map context, Object target, Member member, String
propertyName, Object state) {
}
@Override
public boolean isAccessible(Map context, Object target, Member member,
String propertyName) {
return true;
}
});
try {
Object o = Ognl.getValue("#editsIter =
@java.util.Arrays@asList(\"one,two,three\".split(\",\")),
#editsIter.iterator()", ognlContext, new Object());
ognlContext.put("iterator", o);
Object o2 = Ognl.getValue("#iterator.next()", ognlContext, new
Object());
System.err.println(o2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
{code}
The iterator cursor is set to an Object array with a single value containing
the array values of the ArrayList instead of the values in the ArrayList. This
causes calling iterator.next() to just returns the whole set of ArrayList
values.
The expected behavior would be similar to the following snippet:
{code:java}
import java.util.Arrays;
import java.util.Iterator;
public class IteratorTesting {
public static void main(String ... args) {
Iterator iterator = Arrays.asList("one,two,three".split(",")).iterator();
while(iterator.hasNext()) {
Object o = iterator.next();
System.err.println(o);
}
}
}
{code}
In short, for version 3.2.11 the iterator.next() returns an Object[] of length
1 and in version 2.6.7 calling iterator.next() works the same as the second
snippet.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)