Skip to content

Commit c70ad9b

Browse files
committed
Overlay: Discard base XML entities in overlay extracted files
1 parent a4df12b commit c70ad9b

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

java/ql/lib/semmle/code/java/Overlay.qll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,31 @@ private predicate discardBaseConfigLocatable(@configLocatable el) {
102102
// property files than those included in overlayChangedFiles.
103103
overlayConfigExtracted(baseConfigLocatable(el))
104104
}
105+
106+
/**
107+
* An `@xmllocatable` that should be discarded in the base variant if its file is
108+
* extracted in the overlay variant.
109+
*/
110+
overlay[local]
111+
abstract class DiscardableXmlLocatable extends @xmllocatable {
112+
/** Gets the raw file for an xmllocatable in base. */
113+
string getRawFileInBase() { not isOverlay() and result = getRawFile(this) }
114+
115+
/** Gets a textual representation of this discardable xmllocatable. */
116+
string toString() { none() }
117+
}
118+
119+
overlay[local]
120+
private predicate overlayXmlExtracted(string file) {
121+
isOverlay() and
122+
exists(@xmllocatable el | not files(el, _) and not xmlNs(el, _, _, _) and file = getRawFile(el))
123+
}
124+
125+
overlay[discard_entity]
126+
private predicate discardXmlLocatable(@xmllocatable el) {
127+
overlayChangedFiles(el.(DiscardableXmlLocatable).getRawFileInBase())
128+
or
129+
// The XML extractor is currently not incremental and may extract more
130+
// XML files than those included in overlayChangedFiles.
131+
overlayXmlExtracted(el.(DiscardableXmlLocatable).getRawFileInBase())
132+
}

java/ql/lib/semmle/code/xml/XML.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ private module Input implements InputSig<File, Location> {
7171

7272
import Make<File, Location, Input>
7373

74-
private class DiscardableXmlAttribute extends DiscardableLocatable, @xmlattribute { }
74+
private class DiscardableXmlAttribute extends DiscardableXmlLocatable, @xmlattribute { }
7575

76-
private class DiscardableXmlElement extends DiscardableLocatable, @xmlelement { }
76+
private class DiscardableXmlElement extends DiscardableXmlLocatable, @xmlelement { }
7777

78-
private class DiscardableXmlComment extends DiscardableLocatable, @xmlcomment { }
78+
private class DiscardableXmlComment extends DiscardableXmlLocatable, @xmlcomment { }
7979

80-
private class DiscardableXmlCharacters extends DiscardableLocatable, @xmlcharacters { }
80+
private class DiscardableXmlCharacters extends DiscardableXmlLocatable, @xmlcharacters { }
8181

82-
private class DiscardableXmlDtd extends DiscardableLocatable, @xmldtd { }
82+
private class DiscardableXmlDtd extends DiscardableXmlLocatable, @xmldtd { }

0 commit comments

Comments
 (0)