@@ -202,26 +202,34 @@ static int msre_op_ipmatchFromFile_param_init(msre_rule *rule, char **error_msg)
202
202
unsigned short int op_len ;
203
203
apr_status_t rc ;
204
204
apr_file_t * fd ;
205
- TreeRoot rtree ;
206
- TreeNode * tnode ;
205
+ TreeRoot * rtree = NULL ;
206
+ TreeNode * tnode = NULL ;
207
207
208
208
if (error_msg == NULL )
209
209
return -1 ;
210
210
else
211
211
* error_msg = NULL ;
212
212
213
+ rtree = apr_palloc (rule -> ruleset -> mp , sizeof (TreeRoot ));
214
+ if (rtree == NULL ) {
215
+ * error_msg = apr_psprintf (rule -> ruleset -> mp , "Failed allocating memory to TreeRoot." );
216
+ return 0 ;
217
+ }
218
+
219
+ memset (rtree , 0 , sizeof (TreeRoot ));
220
+
213
221
if ((rule -> op_param == NULL )|| (strlen (rule -> op_param ) == 0 )) {
214
222
* error_msg = apr_psprintf (rule -> ruleset -> mp , "Missing parameter for operator 'ipmatchFromFile'." );
215
223
return 0 ;
216
224
}
217
225
218
- rtree . ipv4_tree = CPTCreateRadixTree (rule -> ruleset -> mp );
219
- if (rtree . ipv4_tree == NULL ) {
226
+ rtree -> ipv4_tree = CPTCreateRadixTree (rule -> ruleset -> mp );
227
+ if (rtree -> ipv4_tree == NULL ) {
220
228
* error_msg = apr_psprintf (rule -> ruleset -> mp , "ipmatchFromFile: Tree tree initialization failed." );
221
229
return 0 ;
222
230
}
223
- rtree . ipv6_tree = CPTCreateRadixTree (rule -> ruleset -> mp );
224
- if (rtree . ipv6_tree == NULL ) {
231
+ rtree -> ipv6_tree = CPTCreateRadixTree (rule -> ruleset -> mp );
232
+ if (rtree -> ipv6_tree == NULL ) {
225
233
* error_msg = apr_psprintf (rule -> ruleset -> mp , "ipmatchFromFile: Tree tree initialization failed." );
226
234
return 0 ;
227
235
}
@@ -274,18 +282,18 @@ static int msre_op_ipmatchFromFile_param_init(msre_rule *rule, char **error_msg)
274
282
if ((start == end ) || (* start == '#' )) continue ;
275
283
276
284
if (strchr (start , ':' ) == NULL ) {
277
- tnode = TreeAddIP (start , rtree . ipv4_tree , IPV4_TREE );
285
+ tnode = TreeAddIP (start , rtree -> ipv4_tree , IPV4_TREE );
278
286
}
279
287
else {
280
- tnode = TreeAddIP (start , rtree . ipv6_tree , IPV6_TREE );
288
+ tnode = TreeAddIP (start , rtree -> ipv6_tree , IPV6_TREE );
281
289
}
282
290
if (tnode == NULL ) {
283
291
* error_msg = apr_psprintf (rule -> ruleset -> mp , "Could not add entry \"%s\" in line %d of file %s to IP list" , start , line , fn );
284
292
}
285
293
}
286
294
287
295
if (fd != NULL ) apr_file_close (fd );
288
- rule -> op_param_data = & rtree ;
296
+ rule -> op_param_data = rtree ;
289
297
return 1 ;
290
298
}
291
299
@@ -303,7 +311,7 @@ static int msre_op_ipmatchFromFile_param_init(msre_rule *rule, char **error_msg)
303
311
*/
304
312
305
313
static int msre_op_ipmatchFromFile_execute (modsec_rec * msr , msre_rule * rule , msre_var * var , char * * error_msg ) {
306
- TreeRoot * rtree = rule -> op_param_data ;
314
+ TreeRoot * rtree = ( TreeRoot * ) rule -> op_param_data ;
307
315
struct in_addr in ;
308
316
#if APR_HAVE_IPV6
309
317
struct in6_addr in6 ;
0 commit comments