diff --git a/misc/scripts/accept-expected-changes-from-ci.py b/misc/scripts/accept-expected-changes-from-ci.py index e5f583044d40..0b50c5c42b50 100755 --- a/misc/scripts/accept-expected-changes-from-ci.py +++ b/misc/scripts/accept-expected-changes-from-ci.py @@ -208,7 +208,7 @@ def get_log_content(status: GithubStatus) -> str: LOGGER.debug(f"'{status.context}': Getting logs") if status.job_ids: contents = [subprocess.check_output( - ["gh", "api", f"/repos/{status.nwo}/actions/jobs/{job_id}/logs"], + ["gh", "api", f"/repos/{status.nwo}/actions/jobs/{job_id}/logs", "--allow-escape-sequences"], ).decode("utf-8") for job_id in status.job_ids] content = "\n".join(contents) else: @@ -275,7 +275,7 @@ def main(pr_number: Optional[int], sha_override: Optional[str] = None, force=Fal lang_test_failures: List[GithubStatus] = list() for status in newest_status.values(): - if " Language Tests" in status.context or status.context in supported_internal_status_language_test_names: + if " Language Tests" in status.context and not " Language Tests Windows" in status.context or status.context in supported_internal_status_language_test_names: if status.state == "failure": lang_test_failures.append(status) elif status.state == "pending": diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index e33d40856ce5..313e1a273e6a 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -265,18 +265,28 @@ edges | main.rs:281:9:281:37 | ...::C {...} [C] | main.rs:281:35:281:35 | i | provenance | | | main.rs:281:35:281:35 | i | main.rs:281:47:281:47 | i | provenance | | | main.rs:281:35:281:35 | i | main.rs:281:47:281:47 | i | provenance | | -| main.rs:303:24:303:24 | a | main.rs:302:26:302:26 | a | provenance | Src:MaD:17 | -| main.rs:303:24:303:24 | a | main.rs:302:26:302:26 | a | provenance | Src:MaD:17 | -| main.rs:305:24:307:9 | \|...\| ... | main.rs:306:18:306:18 | a | provenance | Src:MaD:17 | -| main.rs:305:24:307:9 | \|...\| ... | main.rs:306:18:306:18 | a | provenance | Src:MaD:17 | -| main.rs:312:24:312:24 | f | main.rs:310:18:310:18 | a | provenance | Src:MaD:17 | -| main.rs:312:24:312:24 | f | main.rs:310:18:310:18 | a | provenance | Src:MaD:17 | -| main.rs:314:24:316:9 | \|...\| ... | main.rs:315:18:315:18 | a | provenance | Src:MaD:17 | -| main.rs:314:24:316:9 | \|...\| ... | main.rs:315:18:315:18 | a | provenance | Src:MaD:17 | +| main.rs:302:18:302:18 | ... | main.rs:302:26:302:26 | a | provenance | | +| main.rs:302:18:302:18 | ... | main.rs:302:26:302:26 | a | provenance | | +| main.rs:303:24:303:24 | a | main.rs:302:18:302:18 | ... | provenance | Src:MaD:17 | +| main.rs:303:24:303:24 | a | main.rs:302:18:302:18 | ... | provenance | Src:MaD:17 | +| main.rs:305:24:307:9 | \|...\| ... | main.rs:305:25:305:25 | ... | provenance | Src:MaD:17 | +| main.rs:305:24:307:9 | \|...\| ... | main.rs:305:25:305:25 | ... | provenance | Src:MaD:17 | +| main.rs:305:25:305:25 | ... | main.rs:306:18:306:18 | a | provenance | | +| main.rs:305:25:305:25 | ... | main.rs:306:18:306:18 | a | provenance | | +| main.rs:309:14:309:19 | ...: i64 | main.rs:310:18:310:18 | a | provenance | | +| main.rs:309:14:309:19 | ...: i64 | main.rs:310:18:310:18 | a | provenance | | +| main.rs:312:24:312:24 | f | main.rs:309:14:309:19 | ...: i64 | provenance | Src:MaD:17 | +| main.rs:312:24:312:24 | f | main.rs:309:14:309:19 | ...: i64 | provenance | Src:MaD:17 | +| main.rs:314:24:316:9 | \|...\| ... | main.rs:314:36:314:36 | ... | provenance | Src:MaD:17 | +| main.rs:314:24:316:9 | \|...\| ... | main.rs:314:36:314:36 | ... | provenance | Src:MaD:17 | +| main.rs:314:36:314:36 | ... | main.rs:315:18:315:18 | a | provenance | | +| main.rs:314:36:314:36 | ... | main.rs:315:18:315:18 | a | provenance | | | main.rs:318:31:329:9 | \|...\| ... | main.rs:318:31:329:9 | \|...\| ... [E, Some] | provenance | Src:MaD:18 | | main.rs:318:31:329:9 | \|...\| ... | main.rs:318:31:329:9 | \|...\| ... [E, Some] | provenance | Src:MaD:18 | -| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | | -| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | | +| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:318:32:318:32 | ... [E, Some] | provenance | | +| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:318:32:318:32 | ... [E, Some] | provenance | | +| main.rs:318:32:318:32 | ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | | +| main.rs:318:32:318:32 | ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | | | main.rs:319:19:319:19 | e [E, Some] | main.rs:322:17:322:45 | ...::E {...} [E, Some] | provenance | | | main.rs:319:19:319:19 | e [E, Some] | main.rs:322:17:322:45 | ...::E {...} [E, Some] | provenance | | | main.rs:322:17:322:45 | ...::E {...} [E, Some] | main.rs:322:43:322:43 | o [Some] | provenance | | @@ -291,12 +301,14 @@ edges | main.rs:324:30:324:30 | i | main.rs:324:41:324:41 | i | provenance | | | main.rs:344:21:344:29 | source(...) | main.rs:345:19:345:19 | a | provenance | Sink:MaD:7 | | main.rs:344:21:344:29 | source(...) | main.rs:345:19:345:19 | a | provenance | Sink:MaD:7 | +| main.rs:347:22:352:9 | { ... } [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | | +| main.rs:347:22:352:9 | { ... } [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | | | main.rs:348:17:348:17 | s | main.rs:350:39:350:39 | s | provenance | | | main.rs:348:17:348:17 | s | main.rs:350:39:350:39 | s | provenance | | | main.rs:348:21:348:29 | source(...) | main.rs:348:17:348:17 | s | provenance | | | main.rs:348:21:348:29 | source(...) | main.rs:348:17:348:17 | s | provenance | | -| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | | -| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | | +| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:347:22:352:9 | { ... } [E, Some] | provenance | | +| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:347:22:352:9 | { ... } [E, Some] | provenance | | | main.rs:350:26:350:40 | ...::Some(...) [Some] | main.rs:349:13:351:13 | ...::E {...} [E, Some] | provenance | | | main.rs:350:26:350:40 | ...::Some(...) [Some] | main.rs:349:13:351:13 | ...::E {...} [E, Some] | provenance | | | main.rs:350:39:350:39 | s | main.rs:350:26:350:40 | ...::Some(...) [Some] | provenance | | @@ -654,26 +666,36 @@ nodes | main.rs:281:35:281:35 | i | semmle.label | i | | main.rs:281:47:281:47 | i | semmle.label | i | | main.rs:281:47:281:47 | i | semmle.label | i | +| main.rs:302:18:302:18 | ... | semmle.label | ... | +| main.rs:302:18:302:18 | ... | semmle.label | ... | | main.rs:302:26:302:26 | a | semmle.label | a | | main.rs:302:26:302:26 | a | semmle.label | a | | main.rs:303:24:303:24 | a | semmle.label | a | | main.rs:303:24:303:24 | a | semmle.label | a | | main.rs:305:24:307:9 | \|...\| ... | semmle.label | \|...\| ... | | main.rs:305:24:307:9 | \|...\| ... | semmle.label | \|...\| ... | +| main.rs:305:25:305:25 | ... | semmle.label | ... | +| main.rs:305:25:305:25 | ... | semmle.label | ... | | main.rs:306:18:306:18 | a | semmle.label | a | | main.rs:306:18:306:18 | a | semmle.label | a | +| main.rs:309:14:309:19 | ...: i64 | semmle.label | ...: i64 | +| main.rs:309:14:309:19 | ...: i64 | semmle.label | ...: i64 | | main.rs:310:18:310:18 | a | semmle.label | a | | main.rs:310:18:310:18 | a | semmle.label | a | | main.rs:312:24:312:24 | f | semmle.label | f | | main.rs:312:24:312:24 | f | semmle.label | f | | main.rs:314:24:316:9 | \|...\| ... | semmle.label | \|...\| ... | | main.rs:314:24:316:9 | \|...\| ... | semmle.label | \|...\| ... | +| main.rs:314:36:314:36 | ... | semmle.label | ... | +| main.rs:314:36:314:36 | ... | semmle.label | ... | | main.rs:315:18:315:18 | a | semmle.label | a | | main.rs:315:18:315:18 | a | semmle.label | a | | main.rs:318:31:329:9 | \|...\| ... | semmle.label | \|...\| ... | | main.rs:318:31:329:9 | \|...\| ... | semmle.label | \|...\| ... | | main.rs:318:31:329:9 | \|...\| ... [E, Some] | semmle.label | \|...\| ... [E, Some] | | main.rs:318:31:329:9 | \|...\| ... [E, Some] | semmle.label | \|...\| ... [E, Some] | +| main.rs:318:32:318:32 | ... [E, Some] | semmle.label | ... [E, Some] | +| main.rs:318:32:318:32 | ... [E, Some] | semmle.label | ... [E, Some] | | main.rs:319:19:319:19 | e [E, Some] | semmle.label | e [E, Some] | | main.rs:319:19:319:19 | e [E, Some] | semmle.label | e [E, Some] | | main.rs:322:17:322:45 | ...::E {...} [E, Some] | semmle.label | ...::E {...} [E, Some] | @@ -692,6 +714,8 @@ nodes | main.rs:344:21:344:29 | source(...) | semmle.label | source(...) | | main.rs:345:19:345:19 | a | semmle.label | a | | main.rs:345:19:345:19 | a | semmle.label | a | +| main.rs:347:22:352:9 | { ... } [E, Some] | semmle.label | { ... } [E, Some] | +| main.rs:347:22:352:9 | { ... } [E, Some] | semmle.label | { ... } [E, Some] | | main.rs:348:17:348:17 | s | semmle.label | s | | main.rs:348:17:348:17 | s | semmle.label | s | | main.rs:348:21:348:29 | source(...) | semmle.label | source(...) | diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 32273b92507f..a656550ec037 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -2260,20 +2260,24 @@ module Make< /** Provides a compilation of flow summaries to atomic data-flow steps. */ module Steps { private predicate sourceExitStep(SourceOutputNode nodeFrom, Node nodeTo, boolean local) { - exists(SummaryComponent sc, SourceSinkReportingElement e | - nodeFrom.isExit(_, sc, e, _) and + exists(SummaryComponent sc, SourceSinkReportingElement e, string model | + nodeFrom.isExit(_, sc, e, model) and nodeTo = getSourceDataFlowNode(e, sc) and - if e.getEnclosingCallable() = getNodeEnclosingCallable(nodeTo) + if + e.getEnclosingCallable() = getNodeEnclosingCallable(nodeTo) and + (nodeFrom.isEntry(_, model) or summaryStoreStep(_, _, nodeFrom)) then local = true else local = false ) } private predicate sinkEntryStep(Node nodeFrom, SinkInputNode nodeTo, boolean local) { - exists(SummaryComponent sc, SourceSinkReportingElement e | - nodeTo.isEntry(_, sc, e, _) and + exists(SummaryComponent sc, SourceSinkReportingElement e, string model | + nodeTo.isEntry(_, sc, e, model) and nodeFrom = getSinkDataFlowNode(e, sc) and - if e.getEnclosingCallable() = getNodeEnclosingCallable(nodeFrom) + if + e.getEnclosingCallable() = getNodeEnclosingCallable(nodeFrom) and + (nodeTo.isExit(_, model) or summaryReadStep(nodeTo, _, _)) then local = true else local = false )