Skip to content

fix: validator; reject an XML declaration inside an element - #889

Open
Shaisolaris wants to merge 1 commit into
NaturalIntelligence:masterfrom
Shaisolaris:fix-validator-xml-decl-in-element
Open

Shaisolaris wants to merge 1 commit into
NaturalIntelligence:masterfrom
Shaisolaris:fix-validator-xml-decl-in-element

Conversation

@Shaisolaris

Copy link
Copy Markdown

Purpose / Goal

XMLValidator.validate reports "XML declaration allowed only at the start of the document." for a declaration before the root, but accepts one inside an element:

Input:

XMLValidator.validate('<foo><?xml version="1.0"?></foo>')
XMLValidator.validate('<foo>bar<?xml?></foo>')

Expected: InvalidXml error, "XML declaration allowed only at the start of the document."
Actual: true for both. libxml2 rejects both documents.

Cause: inside tag content the validator calls readPI(xmlData, ++i), which passes the index of the ? instead of the index after <?. readPI then reads the target as ?xml, so the tagname === 'xml' check never matches. The top-level call already passes the position after <?; this change does the same in tag content.

Type

  • Bug Fix
  • Refactoring / Technology upgrade
  • New Feature

Testing:

  • The new spec in spec/validator_spec.js fails before the change and passes after.
  • npx jasmine "spec/*spec.js": 333 specs, 0 failures, 2 pending.
  • The benchmarks in benchmark/ exercise the parser and builder, not the validator, so I did not include perf numbers. The change only alters an index argument.
  • lib/ and the changelog are left for the maintainers, per CONTRIBUTING.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant