[
https://issues.apache.org/jira/browse/LANG-481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Boris reopened LANG-481:
------------------------
I'm sorry, I just dicovered that there is another data-race in that methods
that I overlooked before.
In short: Due to the Java Memory Model and allowed reorderings it is possible
that the hashCode() can return 0 instead of the correct value and thus breaking
HashMaps etc. in this case.
Please see [this
post|http://jeremymanson.blogspot.com/2008/12/benign-data-races-in-java.html]
for details on this issue and String.hashCode() in the java-sources as a
reference how to do it right. He explained it better than I can.
I'll attach a patch against trunk to fix this.
> Possible race-conditions in hashCode of the range classes
> ---------------------------------------------------------
>
> Key: LANG-481
> URL: https://issues.apache.org/jira/browse/LANG-481
> Project: Commons Lang
> Issue Type: Bug
> Affects Versions: 2.4
> Reporter: Boris
> Priority: Minor
> Fix For: 3.0
>
> Attachments: LANG-481.patch
>
>
> The hashCode() methods of the range classes look very suspicious to me. The
> value is lazily initialized, but the calculation is done _on the cached
> value. With some unlucky timing a caller may get an incomplete hash.
> An unlucky sequence of Code could be something like
> T1: if (hashCode == 0) // true
> T1: hashCode = 17;
> T2: if (hashCode == 0) // now false because hashCode was already set
> to 17
> T2: return hashCode; // return 17
> T1: hashCode = 37 * hashCode...........
> where T1 and T2 are different threads accessing the method in parallel and T2
> gets the wrong hash "17".
> Affected classes are
> org.apache.commons.lang.math.DoubleRange
> org.apache.commons.lang.math.FloatRange
> org.apache.commons.lang.math.IntRange
> org.apache.commons.lang.math.LongRange
> org.apache.commons.lang.math.NumberRange
> org.apache.commons.lang.math.Range
> Possible fix: calculate the hash on a temporary variable and finally assign
> it to the member
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.