@@ -20,17 +20,72 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, SideE
20
20
name = "strpbrk" or
21
21
name = "strcmp" or
22
22
name = "strcspn" or
23
- name = "strlen" or
24
23
name = "strncmp" or
25
- name = "strnlen" or
26
24
name = "strrchr" or
27
25
name = "strspn" or
28
26
name = "strtod" or
29
27
name = "strtof" or
30
28
name = "strtol" or
31
29
name = "strtoll" or
32
30
name = "strtoq" or
33
- name = "strtoul" or
31
+ name = "strtoul"
32
+ )
33
+ )
34
+ }
35
+
36
+ override predicate hasArrayInput ( int bufParam ) {
37
+ getParameter ( bufParam ) .getUnspecifiedType ( ) instanceof PointerType
38
+ }
39
+
40
+ override predicate hasArrayWithNullTerminator ( int bufParam ) {
41
+ getParameter ( bufParam ) .getUnspecifiedType ( ) instanceof PointerType
42
+ }
43
+
44
+ override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
45
+ exists ( ParameterIndex i |
46
+ input .isParameter ( i ) and
47
+ exists ( getParameter ( i ) )
48
+ or
49
+ input .isParameterDeref ( i ) and
50
+ getParameter ( i ) .getUnspecifiedType ( ) instanceof PointerType
51
+ ) and
52
+ (
53
+ output .isReturnValueDeref ( ) and
54
+ getUnspecifiedType ( ) instanceof PointerType
55
+ or
56
+ output .isReturnValue ( )
57
+ )
58
+ }
59
+
60
+ override predicate parameterNeverEscapes ( int i ) {
61
+ getParameter ( i ) .getUnspecifiedType ( ) instanceof PointerType and
62
+ not parameterEscapesOnlyViaReturn ( i )
63
+ }
64
+
65
+ override predicate parameterEscapesOnlyViaReturn ( int i ) {
66
+ i = 0 and
67
+ getUnspecifiedType ( ) instanceof PointerType
68
+ }
69
+
70
+ override predicate parameterIsAlwaysReturned ( int i ) { none ( ) }
71
+
72
+ override predicate hasOnlySpecificReadSideEffects ( ) { any ( ) }
73
+
74
+ override predicate hasOnlySpecificWriteSideEffects ( ) { any ( ) }
75
+
76
+ override predicate hasSpecificReadSideEffect ( ParameterIndex i , boolean buffer ) {
77
+ getParameter ( i ) .getUnspecifiedType ( ) instanceof PointerType and
78
+ buffer = true
79
+ }
80
+ }
81
+
82
+ class StrLenFunction extends AliasFunction , ArrayFunction , TaintFunction , SideEffectFunction {
83
+ StrLenFunction ( ) {
84
+ exists ( string name |
85
+ hasGlobalOrStdName ( name ) and
86
+ (
87
+ name = "strlen" or
88
+ name = "strnlen" or
34
89
name = "wcslen"
35
90
)
36
91
or
0 commit comments