17
17
18
18
import cpp
19
19
import codingstandards.c.cert
20
- import semmle.code.cpp.dataflow.DataFlow
20
+ import semmle.code.cpp.dataflow.new. DataFlow
21
21
22
22
class FgetposCall extends FunctionCall {
23
23
FgetposCall ( ) { this .getTarget ( ) .hasGlobalOrStdName ( "fgetpos" ) }
@@ -30,12 +30,12 @@ class FsetposCall extends FunctionCall {
30
30
module FposDFConfig implements DataFlow:: ConfigSig {
31
31
predicate isSource ( DataFlow:: Node source ) {
32
32
// source must be the second parameter of a FgetposCall call
33
- source = DataFlow :: definitionByReferenceNodeFromArgument ( any ( FgetposCall c ) .getArgument ( 1 ) )
33
+ source . asDefiningArgument ( ) = any ( FgetposCall c ) .getArgument ( 1 )
34
34
}
35
35
36
36
predicate isSink ( DataFlow:: Node sink ) {
37
37
// sink must be the second parameter of a FsetposCall call
38
- sink .asExpr ( ) = any ( FsetposCall c ) .getArgument ( 1 )
38
+ sink .asIndirectExpr ( ) = any ( FsetposCall c ) .getArgument ( 1 )
39
39
}
40
40
}
41
41
@@ -45,6 +45,6 @@ from FsetposCall fsetpos
45
45
where
46
46
not isExcluded ( fsetpos .getArgument ( 1 ) ,
47
47
IO2Package:: onlyUseValuesForFsetposThatAreReturnedFromFgetposQuery ( ) ) and
48
- not FposDFFlow :: flowToExpr ( fsetpos .getArgument ( 1 ) )
48
+ not exists ( DataFlow :: Node n | n . asIndirectExpr ( ) = fsetpos .getArgument ( 1 ) | FposDFFlow :: flowTo ( n ) )
49
49
select fsetpos .getArgument ( 1 ) ,
50
50
"The position argument of a call to `fsetpos()` should be obtained from a call to `fgetpos()`."
0 commit comments