Code Review Request for 6578042
David Holmes
david.holmes at oracle.com
Tue Nov 1 23:54:35 UTC 2011
Hi Darryl,
On 2/11/2011 3:51 AM, Darryl Mocek wrote:
> Hello. Please review this patch to fix Bug #6578042
> (System.clearProperty() throws ClassCastException if property value
> isn't a String). The issue is that through the Hashtable methods, it's
> possible to add a Property which isn't a String and set it through
> System.setProperties. clearProperty cast the returned removed object as
> a String, even if it wasn't a String. Test case provided.
>
> Webrev: http://cr.openjdk.java.net/~sherman/darryl/6578042/webrev
This fix seems inconsistent with how this non-String problem is handled
elsewhere. Eg Properties itself does:
public String getProperty(String key) {
Object oval = super.get(key);
String sval = (oval instanceof String) ? (String)oval : null;
return ((sval == null) && (defaults != null)) ?
defaults.getProperty(key) : sval;
}
This will only return actual String values or else null - it won't
convert non-String values to Strings.
Seems to me that Properties should override remove(Object key) to
perform similar logic as getProperty(String key). That would fix the
System.clearProperty issue.
Or, if you want to confine the change to System do:
synchronized(props) {
String ret = props.getProperty(key);
props.remove(key);
return ret;
}
Not quite as efficient of course.
That said, I'd also support a spec change for clearProperty that states
that if the property has been set to a non-String value then
ClassCastException is thrown. I'm somewhat bemused that Properties
didn't override the necessary Hashtable methods to enforce Strings-only
in the first place.
Cheers,
David Holmes
More information about the core-libs-dev
mailing list