https://bz.apache.org/bugzilla/show_bug.cgi?id=69406
Bug ID: 69406
Summary: StringInterpreterEnum rethrows
IllegalArgumentException for invalid enum
Product: Tomcat 9
Version: 9.0.x
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P2
Component: Jasper
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: -----
When StringInterpreterEnum is used, an attempt to evaluate a non-existent enum
value results in an IllegalArgumentException that interrupts JSP code
generation and is recorded by the caller. The desired behavior is to instead
fall back to request-time EL interpretation, similar to the behavior of
ELInterpretertagSetters when encountering a non-existent enum value.
The use of non-existent enums shows up repeatedly in our large application
thanks to a poor coding practice of using "${''}" to represent null. This works
during EL resolution but not at compile-time.
Current code:
@Override
protected String coerceToOtherType(Class<?> c, String s, boolean
isNamedAttribute) {
if (c.isEnum() && !isNamedAttribute) {
@SuppressWarnings({ "unchecked", "rawtypes" })
Enum<?> enumValue = Enum.valueOf((Class<? extends Enum>) c, s);
return c.getName() + "." + enumValue.name();
}
return null;
}
Should be wrapped in a try/catch such as:
@Override
protected String coerceToOtherType(Class<?> c, String s, boolean
isNamedAttribute) {
if (c.isEnum() && !isNamedAttribute) {
@SuppressWarnings({ "unchecked", "rawtypes" })
try {
Enum<?> enumValue = Enum.valueOf((Class<? extends
Enum>) c, s);
return c.getName() + "." + enumValue.name();
} catch (IllegalArgumentException iae) {
log.debug(Localizer.getMessage("jsp.error.typeConversion", s,
"Enum[" + c.getName() + "]"), iae);
}
}
return null;
}
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]