You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Lukasz Lenart (Jira)" <ji...@apache.org> on 2019/11/05 06:16:00 UTC
[jira] [Commented] (OGNL-260) ArrayList Iterator Cursor set to
Object Aray in OGNL
[ https://issues.apache.org/jira/browse/OGNL-260?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16967265#comment-16967265 ]
Lukasz Lenart commented on OGNL-260:
------------------------------------
It's better to report such bugs here https://github.com/jkuhnert/ognl
> 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
> Priority: Major
>
> 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)