From ba27de58a62061d3622f4b65907e8016f1a8c92b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 4 Feb 2025 13:19:13 +0000 Subject: [PATCH] C++: Iterator derefs are partial writes. --- .../lib/semmle/code/cpp/models/implementations/Iterator.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll index 3a93188e9ca6..61ab7a6f991e 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll @@ -432,6 +432,8 @@ class IteratorPointerDereferenceMemberOperator extends MemberFunction, TaintFunc override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { i = -1 and buffer = false } + + override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() } } /** @@ -469,6 +471,8 @@ private class IteratorPointerDereferenceNonMemberOperatorModel extends IteratorP override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { i = 0 and buffer = false } + + override predicate isPartialWrite(FunctionOutput output) { output.isParameterDeref(0) } } /**