-
Couldn't load subscription status.
- Fork 41.6k
Closed
Description
Use ConfigurationPropertyName#adapt method to create two ConfigurationPropertyName, a equals to b but b not equals to a
boolean c1 = adapt("demo", '.').equals(adapt("demo$$", '.')); // true boolean c2 = adapt("demo$$", '.').equals(adapt("demo", '.')); // falseThe problems is in defaultElementEquals method, see below
private boolean defaultElementEquals(Elements e1, Elements e2, int i) { int l1 = e1.getLength(i); int l2 = e2.getLength(i); boolean indexed1 = e1.getType(i).isIndexed(); boolean indexed2 = e2.getType(i).isIndexed(); int i1 = 0; int i2 = 0; while (i1 < l1) { // at this point, e1 has extra invalid chars, but e2 is end, returned false without cheking // left chars of e1 if (i2 >= l2) { return false; } char ch1 = indexed1 ? e1.charAt(i, i1) : Character.toLowerCase(e1.charAt(i, i1)); char ch2 = indexed2 ? e2.charAt(i, i2) : Character.toLowerCase(e2.charAt(i, i2)); if (!indexed1 && !ElementsParser.isAlphaNumeric(ch1)) { i1++; } else if (!indexed2 && !ElementsParser.isAlphaNumeric(ch2)) { i2++; } else if (ch1 != ch2) { return false; } else { i1++; i2++; } } if (i2 < l2) { if (indexed2) { return false; } do { char ch2 = Character.toLowerCase(e2.charAt(i, i2++)); if (ElementsParser.isAlphaNumeric(ch2)) { return false; } } while (i2 < l2); } return true; }Metadata
Metadata
Assignees
Labels
type: bugA general bugA general bug