You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Julian Ryan (Jira)" <ji...@apache.org> on 2019/11/04 21:36:00 UTC
[jira] [Created] (OGNL-260) ArrayList Iterator Cursor set to Object
Aray in OGNL
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)