[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    [jira] Updated: (LANG-481) Possible race-conditions in hashCode of
From:       "Henri Yandell (JIRA)" <jira () apache ! org>
Date:       2009-02-28 4:17:12
Message-ID: 802709378.1235794632903.JavaMail.jira () brutus
[Download RAW message or body]


     [ https://issues.apache.org/jira/browse/LANG-481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel \
]

Henri Yandell updated LANG-481:
-------------------------------

    Fix Version/s: 3.0

> 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
> 
> 
> 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.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic