commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dmitry Katsubo (JIRA)" <>
Subject [jira] [Commented] (LANG-786) StringUtils equals() relies on undefined behavior
Date Thu, 18 Oct 2012 17:26:03 GMT


Dmitry Katsubo commented on LANG-786:

I think there is still area for improvement: [line 192 of CharSequenceUtils()|]

{{TODO: Implement rather than convert to String}}

In my case I have {{CharSequence}} that implements a "lazy" string, and {{toString()}} implementation
is very expensive plus can potentially cause OOM.

Thus {{CharSequenceUtils.regionMatches()}} should really do char-by-char comparison, leaving
the optimization to underlying {{CharSequence}} implementation.
> StringUtils equals() relies on undefined behavior
> -------------------------------------------------
>                 Key: LANG-786
>                 URL:
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.*
>    Affects Versions: 3.x
>         Environment: java version "1.7.0_02"
> Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)
> Fedora 15 AMD64
>            Reporter: Daniel Trebbien
>              Labels: StringUtils
>             Fix For: 3.2
>         Attachments: equals.patch
> Since the {{java.lang.CharSequence}} class was first introduced in 1.4, the JavaDoc block
has contained the following note:
> {quote}
> This interface does not refine the general contracts of the equals and hashCode methods.
The result of comparing two objects that implement CharSequence is therefore, in general,
undefined. Each object may be implemented by a different class, and there is no guarantee
that each class will be capable of testing its instances for equality with those of the other.
> {quote}
> When the signature of the StringUtils equals() method was changed from {{equals(String,
String)}} to {{equals(CharSequence, CharSequence)}} in R920543, the implementation still relied
on calling CharSequence#equals(Object) even though, in general, the result is undefined.
> One example where {{equals(Object)}} returns {{false}} even though, as CharSequences,
two objects represent equal sequences is when one object is an instance of {{javax.lang.model.element.Name}}
and the other object is a String.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message