diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll index be218e0e78e..ddae9a9aa79 100644 --- a/java/ql/lib/semmle/code/java/Overlay.qll +++ b/java/ql/lib/semmle/code/java/Overlay.qll @@ -99,3 +99,23 @@ private predicate discardBaseConfigLocatable(@configLocatable el) { // should be discarded. baseConfigLocatable(el) and overlayHasConfigLocatables() } + +overlay[local] +private predicate baseXmlLocatable(@xmllocatable l) { + not isOverlay() and not files(l, _) and not xmlNs(l, _, _, _) +} + +overlay[local] +private predicate overlayHasXmlLocatable() { + isOverlay() and + exists(@xmllocatable l | not files(l, _) and not xmlNs(l, _, _, _)) +} + +overlay[discard_entity] +private predicate discardBaseXmlLocatable(@xmllocatable el) { + // The XML extractor is currently not incremental, so if + // the overlay contains any XML locatables, the overlay should + // contain a full extraction and all XML locatables from base + // should be discarded. + baseXmlLocatable(el) and overlayHasXmlLocatable() +}