@@ -65,6 +65,15 @@ void test2(Context ctx) {
65
65
void test3 () {
66
66
Object value = extractSingleValueIfPossible (ImmutableList .of ("a" , taint ()));
67
67
sink (value ); //$hasTaintFlow
68
+ List <Object > values = (List <Object >) value ;
69
+ sink (values .get (1 )); //$hasTaintFlow
70
+ Map <String , Object > weirdMap = new HashMap <>();
71
+ weirdMap .put ("a" , value );
72
+ weirdMap .forEach ((key , mapValue ) -> {
73
+ sink (mapValue ); //$hasTaintFlow
74
+ List <Object > values2 = (List <Object >) mapValue ;
75
+ sink (values2 .get (0 )); //$hasTaintFlow
76
+ });
68
77
}
69
78
70
79
void test4 (Context ctx ) {
@@ -74,8 +83,32 @@ void test4(Context ctx) {
74
83
filterAndMerge (pojoForm , mergedParams , name -> false );
75
84
return mergedParams ;
76
85
}).then (pojoMap -> {
77
- sinlk (pojoMap ); //$hasTaintFlow
86
+ sink (pojoMap . keySet (). iterator (). next () ); //$hasTaintFlow
78
87
sink (pojoMap .get ("value" )); //$hasTaintFlow
88
+ pojoMap .forEach ((key , value ) -> {
89
+ sink (key ); //$hasTaintFlow
90
+ sink (value ); //$hasTaintFlow
91
+ List <Object > values = (List <Object >) value ;
92
+ sink (values .get (0 )); //$hasTaintFlow
93
+ });
94
+ });
95
+ }
96
+
97
+ void test5 (Context ctx ) {
98
+ parseToForm (ctx , Pojo .class )
99
+ .map (pojoForm -> {
100
+ Map <String , Object > mergedParams = new HashMap <>();
101
+ filterAndMerge_2 (pojoForm , mergedParams , name -> false );
102
+ return mergedParams ;
103
+ }).then (pojoMap -> {
104
+ sink (pojoMap .keySet ().iterator ().next ()); //TODO:$hasTaintFlow
105
+ sink (pojoMap .get ("value" )); //TODO:$hasTaintFlow
106
+ pojoMap .forEach ((key , value ) -> {
107
+ sink (key ); //TODO:$hasTaintFlow
108
+ sink (value ); //TODO:$hasTaintFlow
109
+ List <Object > values = (List <Object >) value ;
110
+ sink (values .get (0 )); //TODO:$hasTaintFlow
111
+ });
79
112
});
80
113
}
81
114
@@ -138,6 +171,16 @@ private ObjectNode toObjectNode(MultiValueMap<String, String> params, Action<? s
138
171
}
139
172
140
173
private static void filterAndMerge (MultiValueMap <String , String > params , Map <String , Object > defaults , Predicate <String > filter ) {
174
+ for (Map .Entry <String , Collection <String >> entry : params .asMultimap ().asMap ().entrySet ()) {
175
+ String name = entry .getKey ();
176
+ Collection <String > values = entry .getValue ();
177
+ if (!isEmptyAndHasDefault (name , values , defaults ) && !filter .test (name )) {
178
+ defaults .put (name , extractSingleValueIfPossible (values ));
179
+ }
180
+ }
181
+ }
182
+
183
+ private static void filterAndMerge_2 (MultiValueMap <String , String > params , Map <String , Object > defaults , Predicate <String > filter ) {
141
184
params .asMultimap ().asMap ().forEach ((name , values ) -> {
142
185
if (!isEmptyAndHasDefault (name , values , defaults ) && !filter .test (name )) {
143
186
defaults .put (name , extractSingleValueIfPossible (values ));
0 commit comments