Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suppressions DTD not found #10788

Closed
ddidier opened this issue Sep 8, 2021 · 8 comments
Closed

Suppressions DTD not found #10788

ddidier opened this issue Sep 8, 2021 · 8 comments

Comments

@ddidier
Copy link

ddidier commented Sep 8, 2021

Hi,

I'm using CheckStyle with Gradle and I'm using SuppressionsFilter.

  • without SuppressionsFilter and ./gradlew build => pass
  • without SuppressionsFilter and ./gradlew build -Dcheckstyle.enableExternalDtdLoad=true => pass
  • with SuppressionsFilter and ./gradlew build => fail
  • with SuppressionsFilter and ./gradlew build -Dcheckstyle.enableExternalDtdLoad=true => pass

So this error is related to #6474.

The Gradle plugin seems to use the Ant task (see logs below) and it looks like the Ant task is not getting the DTD from the CheckStyle JAR but from the internet only. So this may be a CheckStyle issue rather than a Gradle one.

Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Map.entrySet()" because "this.fTableOfNOTATIONAttributeNames" is null
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDProcessor.endDTD(XMLDTDProcessor.java:1301)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.endEntity(XMLDTDScannerImpl.java:658)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.endEntity(XMLEntityManager.java:1507)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1925)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipSpaces(XMLEntityScanner.java:1664)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2088)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2064)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:299)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1165)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:917)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:541)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
        at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
        at com.puppycrawl.tools.checkstyle.XmlLoader.parseInputSource(XmlLoader.java:86)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.getSuppressionLoader(SuppressionsLoader.java:283)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:238)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:224)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionFilter.finishLocalSetup(SuppressionFilter.java:274)
        at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:197)
        at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:468)
        at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:201)
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.createRootModule(CheckstyleAntTask.java:424)
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.realExecute(CheckstyleAntTask.java:320)
        at com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask.execute(CheckstyleAntTask.java:302)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        ... 142 more
@rnveach
Copy link
Member

rnveach commented Sep 8, 2021

Please provide the XML file and everything else needed to reproduce the issue. https://checkstyle.org/report_issue.html#How_to_report_a_bug.3F

Most likely, you may be using an out of date DTD.

@ddidier
Copy link
Author

ddidier commented Sep 8, 2021

I found the culprit. I'm using XML entities in the suppressions.xml file, i.e.:

<!DOCTYPE suppressions PUBLIC
    "-//Puppy Crawl//DTD Suppressions 1.2//EN"
    "http://www.puppycrawl.com/dtds/suppressions_1_2.dtd" [
    <!ENTITY csiMain "src.main.java.checkstyle.issue">
    ]>
  • No XML entity and ./gradlew build -Dcheckstyle.enableExternalDtdLoad=true => pass
  • No XML entity and ./gradlew build => pass
  • XML entity and ./gradlew build -Dcheckstyle.enableExternalDtdLoad=true => pass
  • XML entity and ./gradlew build => fail

I attach a small Gradle project that demonstrate this behavior: checkstyle-issue-10788.tar.gz

@strkkk
Copy link
Member

strkkk commented Sep 8, 2021

@ddidier does it mean that issue can be closed?

@ddidier
Copy link
Author

ddidier commented Sep 8, 2021

I would say no since this behavior seems unexpected. Why does it work in one case and not in the other?

@rnveach
Copy link
Member

rnveach commented Sep 9, 2021

Why does it work in one case and not in the other?

What 2 cases are you referring to? If your suppression file has entities, then it makes sense that it passes without the filter and fails with the filter when you do not provide checkstyle.enableExternalDtdLoad.

Checkstyle disallows the features by default in XMLs without that extra parameter:

  • load-external-dtd
  • external-general-entities
  • external-parameter-entities

I assume your file may be falling under the parameter entities.

@romani
Copy link
Member

romani commented Sep 9, 2021

We do not support Gradle plugin, to keep issue valid you need to repoduce problem by cli, see link above a how to report issue.

@ddidier
Copy link
Author

ddidier commented Sep 9, 2021

Checkstyle disallows the features by default in XMLs without that extra parameter:

* load-external-dtd
* external-general-entities
* external-parameter-entities

I assume your file may be falling under the parameter entities.

That makes sense. I wasn't aware of the second and third limitations. I looked quickly in the documentation but couldn't find these items, and specifically not in https://checkstyle.sourceforge.io/config_system_properties.html#Enable_External_DTD_load. Do you want me to open a new issue for this? You can close this one.

Thanks

@romani
Copy link
Member

romani commented Sep 9, 2021

Better to open new issue

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

No branches or pull requests

4 participants