Skip to content

Commit

Permalink
Validate xml before parsing.
Browse files Browse the repository at this point in the history
  • Loading branch information
johnspurlock-skymethod committed Dec 13, 2022
1 parent 0229fd8 commit 624f0ed
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 17 deletions.
4 changes: 2 additions & 2 deletions validator-worker/common/deps_xml.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export { parseXml, findChildElements, findElementRecursive, computeAttributeMap, qnameEq, qnamesInclude } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/common/xml_parser.ts';
export type { ExtendedXmlNode, Qname } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/common/xml_parser.ts';
export { parseXml, validateXml, findChildElements, findElementRecursive, computeAttributeMap, qnameEq, qnamesInclude } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/common/xml_parser.ts';
export type { ExtendedXmlNode, Qname } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/common/xml_parser.ts';
7 changes: 6 additions & 1 deletion validator-worker/common/validation_job_vm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { checkMatches, checkEqual } from './check.ts';
import { Qnames } from './qnames.ts';
import { isReadonlyArray } from './util.ts';
import { RuleReference, MessageOptions, ValidationCallbacks, validateFeedXml, podcastIndexReference } from './validator.ts';
import { computeAttributeMap, ExtendedXmlNode, parseXml } from './deps_xml.ts';
import { computeAttributeMap, ExtendedXmlNode, parseXml, validateXml } from './deps_xml.ts';
import { setIntersect } from './sets.ts';
import { InMemoryCache, Callbacks, Comment, makeRateLimitedFetcher, makeThreadcap, Threadcap, updateThreadcap, Fetcher as ThreadcapFetcher } from './deps_comments.ts';

Expand Down Expand Up @@ -189,6 +189,11 @@ export class ValidationJobVM {

let xml: ExtendedXmlNode | undefined;
try {
const result = validateXml(text);
if (result !== true) {
const { code, col, line, msg } = result;
throw new Error(`${code} (at line ${line}, col ${col}): ${msg}`);
}
xml = parseXml(text);
console.log(xml);
} catch (e) {
Expand Down
10 changes: 5 additions & 5 deletions validator-worker/deps_cli.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export { basename, dirname, join, fromFileUrl, resolve, toFileUrl, extname, relative, isAbsolute, normalize, parse as parsePath, globToRegExp } from 'https://deno.land/std@0.140.0/path/mod.ts';
export { parse as parseFlags } from 'https://deno.land/std@0.140.0/flags/mod.ts';
export { ModuleWatcher } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/cli/module_watcher.ts';
export { bundle } from 'https://raw.githubusercontent.com/skymethod/denoflare/e5a9ba66237f9e3a5d555442252539ec267ae989/cli/bundle.ts';
export { fileExists } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/cli/fs_util.ts';
export { Bytes } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/common/bytes.ts';
export { parseJsonc } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/cli/jsonc.ts';
export { ModuleWatcher } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/cli/module_watcher.ts';
export { bundle } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/cli/bundle.ts';
export { fileExists } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/cli/fs_util.ts';
export { Bytes } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/common/bytes.ts';
export { parseJsonc } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/cli/jsonc.ts';
8 changes: 4 additions & 4 deletions validator-worker/deps_worker.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export { Bytes } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/common/bytes.ts';
export { importText } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/common/import_text.ts';
export type { IncomingRequestCf, ModuleWorkerContext, DurableObjectNamespace, DurableObjectState } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/common/cloudflare_workers_types.d.ts';
export { ColoFromTrace } from 'https://raw.githubusercontent.com/skymethod/denoflare/v0.5.1/examples/tiered-websockets-worker/colo_from_trace.ts';
export { Bytes } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/common/bytes.ts';
export { importText } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/common/import_text.ts';
export type { IncomingRequestCf, ModuleWorkerContext, DurableObjectNamespace, DurableObjectState } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/common/cloudflare_workers_types.d.ts';
export { ColoFromTrace } from 'https://raw.githubusercontent.com/skymethod/denoflare/eeacf004d8ec15913f94d5644d10f8f04d5340d2/examples/tiered-websockets-worker/colo_from_trace.ts';
21 changes: 17 additions & 4 deletions validator-worker/static/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2389,11 +2389,13 @@ var getTraversalObj$1 = parser.getTraversalObj;
parser.j2xParser;
parser.parse;
parser.parseToNimn;
parser.validate;
function decodeXml(encoded) {
var validate$1 = parser.validate;
function decodeXml(encoded, additionalEntities = {}) {
return encoded.replaceAll(/&(#(\d+)|[a-z]+);/g, (str, entity, decimal)=>{
if (typeof decimal === 'string') return String.fromCharCode(parseInt(decimal));
if (typeof entity === 'string') {
const additional = additionalEntities[entity];
if (additional) return additional;
const rt = ENTITIES_TO_UNENCODED_CHARS[entity];
if (rt) return rt;
}
Expand All @@ -2407,12 +2409,18 @@ const ENTITIES_TO_UNENCODED_CHARS = {
'apos': `'`,
'quot': '"'
};
function parseXml(xml) {
function validateXml(xml) {
const rt = validate$1(xml);
return rt === true ? rt : rt.err;
}
function parseXml(xml, opts = {}) {
const { additionalEntities } = opts;
const tagValueProcessor = (tagName)=>decodeXml(tagName, additionalEntities);
const rt = getTraversalObj$1(xml, {
ignoreAttributes: false,
parseAttributeValue: false,
parseNodeValue: false,
tagValueProcessor: decodeXml
tagValueProcessor
});
const namespaces = new XmlNamespaces();
applyQnames(rt, namespaces);
Expand Down Expand Up @@ -4215,6 +4223,11 @@ class ValidationJobVM {
start = Date.now();
let xml;
try {
const result = validateXml(text);
if (result !== true) {
const { code , col , line , msg } = result;
throw new Error(`${code} (at line ${line}, col ${col}): ${msg}`);
}
xml = parseXml(text);
console.log(xml);
} catch (e) {
Expand Down
2 changes: 1 addition & 1 deletion validator-worker/static/app.js.sha1
Original file line number Diff line number Diff line change
@@ -1 +1 @@
343c7c4c43753e414235693f577f48d9f9382172
d053ae71a909e6e2ac4854bff6e2559e57f525a7

0 comments on commit 624f0ed

Please sign in to comment.