bug 8014477 Race in String.contentEquals

Peter Levart peter.levart at gmail.com
Tue May 14 11:04:41 UTC 2013


Ok, here's the corrected fix:

http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.03/

I also added a reproducer for the bug.

Regards, peter

On 05/14/2013 07:53 AM, Peter Levart wrote:
>
> Right, sb.length() should be used. I will correct that as soon as I 
> get to the keyboard.
>
> Regards, Peter
>
> On May 14, 2013 7:22 AM, "David Holmes" <david.holmes at oracle.com 
> <mailto:david.holmes at oracle.com>> wrote:
>
>     Thanks Peter! I've filed
>
>     8014477
>     Race condition in String.contentEquals when comparing with
>     StringBuffer
>
>     On 14/05/2013 8:34 AM, Peter Levart wrote:
>
>         On 05/14/2013 12:09 AM, Peter Levart wrote:
>
>             I noticed a synchronization bug in String.contentEquals
>             method. If
>             called with a StringBuffer argument while concurrent thread is
>             modifying the StringBuffer, the method can either throw
>             ArrayIndexOutOfBoundsException or return true even though
>             the content
>             of the StringBuffer has never been the same as the String's.
>
>             Here's a proposed patch:
>
>             http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.01/
>             <http://cr.openjdk.java.net/%7Eplevart/jdk8-tl/String.contentEquals/webrev.01/>
>
>             Regards, Peter
>
>
>         Or even better (with some code clean-up):
>
>         http://cr.openjdk.java.net/~plevart/jdk8-tl/String.contentEquals/webrev.02/
>         <http://cr.openjdk.java.net/%7Eplevart/jdk8-tl/String.contentEquals/webrev.02/>
>
>
>     This part is not correct I believe:
>
>     1010     private boolean
>     nonSyncContentEquals(AbstractStringBuilder sb) {
>     1011         char v1[] = value;
>     1012         char v2[] = sb.getValue();
>     1013         int n = v1.length;
>     1014         if (n != v2.length) {
>     1015             return false;
>     1016         }
>
>     v2 can be larger than v1 if v2 is not being fully used (ie count <
>     length).
>
>     David
>     -----
>




More information about the core-libs-dev mailing list