Skip to content

Commit ec77dcb

Browse files
[MOD] fn:parse-xml: dynamic permission check; use local defaults
1 parent d2f69d4 commit ec77dcb

3 files changed

Lines changed: 16 additions & 14 deletions

File tree

basex-core/src/main/java/org/basex/query/func/fn/FnParseXml.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,19 @@ public final class FnParseXml extends FnParseXmlFragment {
1616
/** Function options. */
1717
public static final class ParseXmlOptions extends ParseXmlFragmentOptions {
1818
/** DTD validation. */
19-
public static final BooleanOption DTD_VALIDATION = new BooleanOption("dtd-validation");
19+
public static final BooleanOption DTD_VALIDATION = new BooleanOption("dtd-validation", false);
2020
/** XSD validation. */
21-
public static final StringOption XSD_VALIDATION = new StringOption("xsd-validation");
21+
public static final StringOption XSD_VALIDATION = new StringOption("xsd-validation",
22+
MainOptions.SKIP);
2223

23-
/** Use internal XML parser (default: {@link MainOptions#INTPARSE}). */
24-
public static final BooleanOption INTPARSE = new BooleanOption("intparse");
25-
/** Flag for parsing DTDs (default: {@link MainOptions#DTD}). */
26-
public static final BooleanOption DTD = new BooleanOption("dtd");
27-
/** Flag for using XInclude (default: {@link MainOptions#XINCLUDE}). */
28-
public static final BooleanOption XINCLUDE = new BooleanOption("xinclude");
29-
/** Path to XML Catalog file (default: {@link MainOptions#CATALOG}). */
30-
public static final StringOption CATALOG = new StringOption("catalog");
24+
/** Custom option (see {@link MainOptions#INTPARSE}). */
25+
public static final BooleanOption INTPARSE = new BooleanOption("intparse", false);
26+
/** Custom option (see {@link MainOptions#DTD}). */
27+
public static final BooleanOption DTD = new BooleanOption("dtd", false);
28+
/** Custom option (see {@link MainOptions#XINCLUDE}). */
29+
public static final BooleanOption XINCLUDE = new BooleanOption("xinclude", false);
30+
/** Custom option (see {@link MainOptions#CATALOG}). */
31+
public static final StringOption CATALOG = new StringOption("catalog", "");
3132
}
3233

3334
@Override

basex-core/src/main/java/org/basex/query/func/fn/FnParseXmlFragment.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public static class ParseXmlFragmentOptions extends Options {
3737
/** Remove whitespace-only text nodes. */
3838
public static final BooleanOption STRIP_SPACE = new BooleanOption("strip-space", false);
3939

40-
/** Strip namespaces (default: {@link MainOptions#STRIPNS}). */
41-
public static final BooleanOption STRIPNS = new BooleanOption("stripns");
40+
/** Custom option (see {@link MainOptions#STRIPNS}). */
41+
public static final BooleanOption STRIPNS = new BooleanOption("stripns", false);
4242
}
4343

4444
@Override
@@ -83,7 +83,8 @@ final Item parseXml(final QueryContext qc, final boolean fragment,
8383
ParseXmlOptions.CATALOG, MainOptions.CATALOG).forEach((opt, mopt) -> {
8484
if(options.contains(opt)) mopts.set(mopt, options.get(opt));
8585
});
86-
if(mopts.get(MainOptions.DTD) || mopts.get(MainOptions.XINCLUDE)) checkPerm(qc, Perm.CREATE);
86+
if(mopts.get(MainOptions.DTD) || mopts.get(MainOptions.XINCLUDE) ||
87+
!mopts.get(MainOptions.CATALOG).isEmpty()) checkPerm(qc, Perm.CREATE);
8788

8889
final boolean dtdVal = mopts.get(MainOptions.DTDVALIDATION);
8990
final String xsdVal = mopts.get(MainOptions.XSDVALIDATION);

basex-core/src/test/java/org/basex/query/func/FnModuleTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2326,7 +2326,7 @@ public final class FnModuleTest extends SandboxTest {
23262326
+ "'/></a>", " {'xinclude': 'no'}"), "<a xmlns:xi=\"http://www.w3.org/2001/XInclude\">"
23272327
+ "<xi:include href=\"" + path + "\"/></a>");
23282328
query(func.args("<a xmlns:xi='http://www.w3.org/2001/XInclude'><xi:include href='" + path
2329-
+ "'/></a>"), "<a xmlns:xi=\"http://www.w3.org/2001/XInclude\">"
2329+
+ "'/></a>", " {'xinclude': 'yes'}"), "<a xmlns:xi=\"http://www.w3.org/2001/XInclude\">"
23302330
+ "<b xml:base=\"src/test/resources/parse-xml.entity\"/></a>");
23312331

23322332
error(func.args(dtd + "<b>&amp;e;</b>", " {'dtd-validation': 'yes'}"), DTDVALIDATIONERR_X);

0 commit comments

Comments
 (0)