Skip to content

Commit

Permalink
Fix for invalid attribute values when it does not conform to the DTD (#…
Browse files Browse the repository at this point in the history
…128)

Fixing invalid attribute values in DTDValidator.
  • Loading branch information
ChrisTrenkamp committed Apr 19, 2021
1 parent 6adb1e4 commit 5ba99cd
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/java/com/ctc/wstx/dtd/DTDValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ public String validateAttribute(String localName, String uri,
/* [WSTX-190] NPE if we continued (after reported didn't
* throw an exception); nothing more to do, let's leave
*/
return new String(valueChars, valueStart, valueEnd);
return new String(valueChars, valueStart, valueEnd-valueStart);
}
int index = mAttrCount++;
if (index >= mAttrSpecs.length) {
Expand Down
57 changes: 57 additions & 0 deletions src/test/java/wstxtest/vstream/TestInvalidAttributeValue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package wstxtest.vstream;

import stax2.BaseStax2Test;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import javax.xml.stream.*;

import org.codehaus.stax2.XMLStreamReader2;
import org.codehaus.stax2.validation.ValidationProblemHandler;
import org.codehaus.stax2.validation.XMLValidationException;
import org.codehaus.stax2.validation.XMLValidationProblem;
import org.codehaus.stax2.validation.XMLValidationSchema;
import org.codehaus.stax2.validation.XMLValidationSchemaFactory;

public class TestInvalidAttributeValue
extends BaseStax2Test
{
public void testInvalidAttributeValue() throws Exception
{
final String DOC = "<root note='note' verbose='yes'/>\n";

final String INPUT_DTD =
"<!ELEMENT root ANY>\n"
+"<!ATTLIST root note CDATA #IMPLIED>\n"
;

XMLInputFactory f = getInputFactory();
setCoalescing(f, true);

XMLValidationSchemaFactory schemaFactory =
XMLValidationSchemaFactory.newInstance(XMLValidationSchema.SCHEMA_ID_DTD);
XMLValidationSchema schema = schemaFactory.createSchema(new StringReader(INPUT_DTD));
XMLStreamReader2 sr = (XMLStreamReader2)f.createXMLStreamReader(
new StringReader(DOC));

final List<XMLValidationProblem> probs = new ArrayList<XMLValidationProblem>();

sr.validateAgainst(schema);
sr.setValidationProblemHandler(new ValidationProblemHandler() {
@Override
public void reportProblem(XMLValidationProblem problem)
throws XMLValidationException {
probs.add(problem);
}
});

assertTokenType(START_ELEMENT, sr.next());
assertEquals("root", sr.getLocalName());

final String verboseValue = sr.getAttributeValue(null, "verbose");

assertEquals("yes", verboseValue);
}
}

0 comments on commit 5ba99cd

Please sign in to comment.