1717
1818import cpp
1919import codingstandards.c.cert
20- import semmle.code.cpp.dataflow.DataFlow
20+ import semmle.code.cpp.dataflow.new. DataFlow
2121
2222class FgetposCall extends FunctionCall {
2323 FgetposCall ( ) { this .getTarget ( ) .hasGlobalOrStdName ( "fgetpos" ) }
@@ -30,12 +30,12 @@ class FsetposCall extends FunctionCall {
3030module FposDFConfig implements DataFlow:: ConfigSig {
3131 predicate isSource ( DataFlow:: Node source ) {
3232 // 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 )
3434 }
3535
3636 predicate isSink ( DataFlow:: Node sink ) {
3737 // 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 )
3939 }
4040}
4141
@@ -45,6 +45,6 @@ from FsetposCall fsetpos
4545where
4646 not isExcluded ( fsetpos .getArgument ( 1 ) ,
4747 IO2Package:: onlyUseValuesForFsetposThatAreReturnedFromFgetposQuery ( ) ) and
48- not FposDFFlow :: flowToExpr ( fsetpos .getArgument ( 1 ) )
48+ not exists ( DataFlow :: Node n | n . asIndirectExpr ( ) = fsetpos .getArgument ( 1 ) | FposDFFlow :: flowTo ( n ) )
4949select fsetpos .getArgument ( 1 ) ,
5050 "The position argument of a call to `fsetpos()` should be obtained from a call to `fgetpos()`."
0 commit comments