Hi group!

 

I have a 10 year old struts2 web application that uses validation with rules 
defined in XML files.

One of these instantiates a java.util.Date to compare the the value of a bean 
with the current date:

 

            ( employee.birthday == null || employee.birthday.before(new 
java.util.Date()))

 

When it comes to instantiate the Date object the call fails in 
SecurityMemberAccess. isAccessible. Form me it seems that a constructor call is 
not handled here properly.

 

    public boolean isAccessible(Map context, Object target, Member member, 
String propertyName) {

        LOG.debug("Checking access for [target: {}, member: {}, property: {}]", 
target, member, propertyName);

 

        final int memberModifiers = member.getModifiers();

        final Class<?> memberClass = member.getDeclaringClass();

        // target can be null in case of accessing static fields, since OGNL 
3.2.8

        final Class<?> targetClass = Modifier.isStatic(memberModifiers) ? 
memberClass : target.getClass();

        if (!memberClass.isAssignableFrom(targetClass)) {

            throw new IllegalArgumentException("Target does not match member!");

        }

 

When the method is called target is the class object for java.util.Date, member 
is a representation of public java.util.Date() and propertyName is null.

memberModifiers evaluates to 1 and memberClass to the class object for 
java.util.Date.

 

This causes the if to resolve to false and throwing the exception. I cannot see 
how anyone could call any constructor at all.

Is this a known issue or am I overseeing something?

 

Kind regards 

Sebastian

Reply via email to