Skip to content

Commit

Permalink
Fix infinite loop inside LSPMessageFormatter for some cases
Browse files Browse the repository at this point in the history
Fixes #856

Signed-off-by: azerr <azerr@redhat.com>
  • Loading branch information
azerr authored and angelozerr committed Sep 25, 2020
1 parent bcc8a48 commit 567f598
Show file tree
Hide file tree
Showing 2 changed files with 180 additions and 167 deletions.
Expand Up @@ -137,29 +137,28 @@ public static Object[] reformatSchemaArguments(XMLSchemaErrorCode code, Object[]
}
}

private static String reformatElementNames(boolean hasNamespace, String names) {
StringBuilder sb = new StringBuilder();
private static String reformatElementNames(String names) {
StringBuilder result = new StringBuilder();

MultiLineStream stream = new MultiLineStream(names, 0);

while (!stream.eos()) { // }
stream.advance(1);// Consume ' ' or '{' if first item
if(hasNamespace) {
boolean hasNamespace = stream.peekChar() == _DQO;
if (hasNamespace) {
stream.advance(1); // Consume "
stream.advanceUntilAnyOfChars(_DQO, _SQO, _SIQ); // " | " | '
stream.advance(2); // Consume quotation and':'
}
sb.append(" - ");
result.append(" - ");
while (stream.peekChar() != _CCB && stream.peekChar() != _CMA) { // } | ,
sb.append(Character.toString((char) stream.peekChar()));
result.append(Character.toString((char) stream.peekChar()));
stream.advance(1);
}
sb.append("\n");
//if (stream.peekChar() == _CMA) {
stream.advance(1);
//}
result.append("\n");
stream.advance(1);
}
return sb.toString();
return result.toString();
}

/**
Expand Down Expand Up @@ -199,10 +198,6 @@ private static Matcher getNamespaceMatcher(String name) {
return namespacePattern.matcher(name);
}

// private static boolean isNamespaceDefined(String name) {
// return getNamespaceMatcher(name).matches();
// }

/**
* Parses the message for cvc.2.4.a and returns reformatted arguments
*
Expand All @@ -228,11 +223,11 @@ private static Object[] cvc_2_4_a_solution(Object[] arguments) {
if (m.matches()) {
name = m.group(2);
schema = "{" + m.group(1) + "}";
validNames = reformatElementNames(true, getString(arguments[1]));
validNames = reformatElementNames(getString(arguments[1]));
} else { // No namespace, so just element name
name = getString(arguments[0]);
schema = "{the schema}";
validNames = reformatElementNames(false, getString(arguments[1]));
validNames = reformatElementNames(getString(arguments[1]));
}
name = "- " + name;
return new Object[] { name, validNames, schema };
Expand Down Expand Up @@ -262,11 +257,11 @@ private static Object[] cvc_2_4_b_solution(Object[] arguments) {
String schema = null;

if (m.matches()) {
missingChildElements = reformatElementNames(true, getString(arguments[1]));
missingChildElements = reformatElementNames(getString(arguments[1]));
schema = "{" + m.group(1) + "}";
} else {
// No namespace, so just element name
missingChildElements = reformatElementNames(false, getString(arguments[1]));
missingChildElements = reformatElementNames(getString(arguments[1]));
schema = "{the schema}";
}
element = "- " + getString(arguments[0]);
Expand Down

0 comments on commit 567f598

Please sign in to comment.