Visitar URL original
ConfigurationPropertyName#equals is not symmetric when adapt has removed trailing characters from an element · Issue #30317 · spring-projects/spring-boot · GitHub
Skip to content

ConfigurationPropertyName#equals is not symmetric when adapt has removed trailing characters from an element #30317

Closed

Description

@Adams112

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", '.'));  // false

The 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;
	}

Activity

  1. added this to the 2.5.x milestone on Mar 23, 2022
  2. changed the title [-]ConfigurationPropertyName#equals method has Unexpected characteristic[/-] [+]ConfigurationPropertyName#equals is not symmetric for adapted names[/+] on Mar 23, 2022
  3. changed the title [-]ConfigurationPropertyName#equals is not symmetric for adapted names[/-] [+]ConfigurationPropertyName#equals is not symmetric when adapt has removed trailing characters from an element[/+] on Mar 23, 2022
  4. self-assigned this
    on Mar 23, 2022
  5. modified the milestones: 2.5.x, 2.5.11 on Mar 23, 2022
  6. added a commit that references this issue on Mar 23, 2022
    73d9e0e
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions