Author: markt
Date: Wed Feb 15 16:26:08 2012
New Revision: 1244567
URL: http://svn.apache.org/viewvc?rev=1244567&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52666
Correct coercion order in EL for A {==,!=,eq,ne} B
Modified:
tomcat/trunk/java/org/apache/el/lang/ELSupport.java
tomcat/trunk/test/org/apache/el/lang/TestELSupport.java
Modified: tomcat/trunk/java/org/apache/el/lang/ELSupport.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/ELSupport.java?rev=1244567&r1=1244566&r2=1244567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/lang/ELSupport.java (original)
+++ tomcat/trunk/java/org/apache/el/lang/ELSupport.java Wed Feb 15 16:26:08 2012
@@ -127,35 +127,31 @@ public class ELSupport {
return true;
} else if (obj0 == null || obj1 == null) {
return false;
- } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
- return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
- } else if (obj0.getClass().isEnum()) {
- return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
- } else if (obj1.getClass().isEnum()) {
- return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
- } else if (obj0 instanceof String || obj1 instanceof String) {
- int lexCompare =
coerceToString(obj0).compareTo(coerceToString(obj1));
- return (lexCompare == 0) ? true : false;
- }
- if (isBigDecimalOp(obj0, obj1)) {
+ } else if (isBigDecimalOp(obj0, obj1)) {
BigDecimal bd0 = (BigDecimal) coerceToNumber(obj0,
BigDecimal.class);
BigDecimal bd1 = (BigDecimal) coerceToNumber(obj1,
BigDecimal.class);
return bd0.equals(bd1);
- }
- if (isDoubleOp(obj0, obj1)) {
+ } else if (isDoubleOp(obj0, obj1)) {
Double d0 = (Double) coerceToNumber(obj0, Double.class);
Double d1 = (Double) coerceToNumber(obj1, Double.class);
return d0.equals(d1);
- }
- if (isBigIntegerOp(obj0, obj1)) {
+ } else if (isBigIntegerOp(obj0, obj1)) {
BigInteger bi0 = (BigInteger) coerceToNumber(obj0,
BigInteger.class);
BigInteger bi1 = (BigInteger) coerceToNumber(obj1,
BigInteger.class);
return bi0.equals(bi1);
- }
- if (isLongOp(obj0, obj1)) {
+ } else if (isLongOp(obj0, obj1)) {
Long l0 = (Long) coerceToNumber(obj0, Long.class);
Long l1 = (Long) coerceToNumber(obj1, Long.class);
return l0.equals(l1);
+ } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
+ return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
+ } else if (obj0.getClass().isEnum()) {
+ return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
+ } else if (obj1.getClass().isEnum()) {
+ return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
+ } else if (obj0 instanceof String || obj1 instanceof String) {
+ int lexCompare =
coerceToString(obj0).compareTo(coerceToString(obj1));
+ return (lexCompare == 0) ? true : false;
} else {
return obj0.equals(obj1);
}
Modified: tomcat/trunk/test/org/apache/el/lang/TestELSupport.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TestELSupport.java?rev=1244567&r1=1244566&r2=1244567&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TestELSupport.java (original)
+++ tomcat/trunk/test/org/apache/el/lang/TestELSupport.java Wed Feb 15 16:26:08
2012
@@ -23,11 +23,17 @@ import javax.el.ELException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class TestELSupport {
@Test
+ public void testEquals() {
+ assertTrue(ELSupport.equals("01", Long.valueOf(1)));
+ }
+
+ @Test
public void testBigDecimal() {
testIsSame(new BigDecimal(
"0.123456789012345678901234567890123456789012345678901234567890123456789"));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]