@@ -23,7 +23,6 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, Side
2323 or name = "strnlen"
2424 or name = "strrchr"
2525 or name = "strspn"
26- or name = "strstr"
2726 or name = "strtod"
2827 or name = "strtof"
2928 or name = "strtol"
@@ -38,6 +37,54 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, Side
3837 getParameter ( bufParam ) .getUnspecifiedType ( ) instanceof PointerType
3938 }
4039
40+ override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
41+ exists ( ParameterIndex i |
42+ input .isInParameter ( i ) or
43+ (
44+ input .isInParameterPointer ( i ) and
45+ getParameter ( i ) .getUnspecifiedType ( ) instanceof PointerType
46+ )
47+ ) and
48+ (
49+ output .isOutReturnValue ( )
50+ )
51+ }
52+
53+ override predicate parameterNeverEscapes ( int i ) {
54+ getParameter ( i ) .getUnspecifiedType ( ) instanceof PointerType
55+ }
56+
57+ override predicate parameterEscapesOnlyViaReturn ( int i ) {
58+ none ( )
59+ }
60+
61+ override predicate parameterIsAlwaysReturned ( int i ) {
62+ none ( )
63+ }
64+
65+ override predicate neverReadsMemory ( ) {
66+ none ( )
67+ }
68+
69+ override predicate neverWritesMemory ( ) {
70+ any ( )
71+ }
72+ }
73+ class PureReturningStrFunction extends AliasFunction , ArrayFunction , TaintFunction , SideEffectFunction {
74+ PureReturningStrFunction ( ) {
75+ exists ( string name |
76+ hasName ( name ) and
77+ (
78+ name = "strstr" or
79+ name = "strpbrk"
80+ )
81+ )
82+ }
83+
84+ override predicate hasArrayInput ( int bufParam ) {
85+ getParameter ( bufParam ) .getUnspecifiedType ( ) instanceof PointerType
86+ }
87+
4188 override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
4289 exists ( ParameterIndex i |
4390 input .isInParameter ( i ) or
@@ -56,11 +103,11 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, Side
56103 }
57104
58105 override predicate parameterNeverEscapes ( int i ) {
59- getParameter ( i ) . getUnspecifiedType ( ) instanceof PointerType
106+ i = 1
60107 }
61108
62109 override predicate parameterEscapesOnlyViaReturn ( int i ) {
63- none ( )
110+ i = 0
64111 }
65112
66113 override predicate parameterIsAlwaysReturned ( int i ) {
0 commit comments