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)