diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll index df2d04a97d7..70d6795f76b 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll @@ -49,7 +49,11 @@ private Class getRootType(FieldAccess fa) { exists(VariableAccess root | root = fa.getQualifier+() and not exists(root.getQualifier()) and - result = root.getUnspecifiedType() + // We strip the type because the root may be a pointer. For example `p` in: + // struct S { char buffer[10]; }; + // S* p = ...; + // strcpy(p->buffer, "abc"); + result = root.getUnspecifiedType().stripType() ) } diff --git a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll index 468ab9506a5..a1c75f93802 100644 --- a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll @@ -59,12 +59,15 @@ module InputToArgumentToExecFlowConfig implements DataFlow::ConfigSig { any(CommandInjectionAdditionalTaintStep s).step(n1, n2) } - // It's valid to use diff-informed data flow for this configuration because - // the location of the selected element in the query is contained inside the - // location of the sink. The query, as a predicate, is used negated in - // another query, but that's only to prevent overlapping results between two - // queries. + // The query, as a predicate, is used negated in another query, but that's + // only to prevent overlapping results between two queries. predicate observeDiffInformedIncrementalMode() { any() } + + // All queries use the argument as the primary location and do not use the + // sink as an associated location. + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(Expr argument | argumentToExec(argument, sink) | result = argument.getLocation()) + } } /** diff --git a/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll b/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll index 90e47521bf0..080a7bb482f 100644 --- a/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll +++ b/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll @@ -46,6 +46,12 @@ module WebviewDebugEnabledConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + // This module is only used in `WebviewDebuggingEnabled.ql`, which doesn't + // select the source in any "$@" column. + none() + } } /**