Skip to content

Commit 406d482

Browse files
committed
Fix issue in ipmatchf
1 parent 8148a80 commit 406d482

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

CHANGES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040

4141
* Fixed issue when execute make install under Solaris.
4242

43+
* Fixed ipmatchf operator was not working as expected.
44+
4345
01 Nov 2012 - 2.7.1
4446
-------------------
4547

apache2/re_operators.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -202,26 +202,34 @@ static int msre_op_ipmatchFromFile_param_init(msre_rule *rule, char **error_msg)
202202
unsigned short int op_len;
203203
apr_status_t rc;
204204
apr_file_t *fd;
205-
TreeRoot rtree;
206-
TreeNode *tnode;
205+
TreeRoot *rtree = NULL;
206+
TreeNode *tnode = NULL;
207207

208208
if (error_msg == NULL)
209209
return -1;
210210
else
211211
*error_msg = NULL;
212212

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+
213221
if ((rule->op_param == NULL)||(strlen(rule->op_param) == 0)) {
214222
*error_msg = apr_psprintf(rule->ruleset->mp, "Missing parameter for operator 'ipmatchFromFile'.");
215223
return 0;
216224
}
217225

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) {
220228
*error_msg = apr_psprintf(rule->ruleset->mp, "ipmatchFromFile: Tree tree initialization failed.");
221229
return 0;
222230
}
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) {
225233
*error_msg = apr_psprintf(rule->ruleset->mp, "ipmatchFromFile: Tree tree initialization failed.");
226234
return 0;
227235
}
@@ -274,18 +282,18 @@ static int msre_op_ipmatchFromFile_param_init(msre_rule *rule, char **error_msg)
274282
if ((start == end) || (*start == '#')) continue;
275283

276284
if (strchr(start, ':') == NULL) {
277-
tnode = TreeAddIP(start, rtree.ipv4_tree, IPV4_TREE);
285+
tnode = TreeAddIP(start, rtree->ipv4_tree, IPV4_TREE);
278286
}
279287
else {
280-
tnode = TreeAddIP(start, rtree.ipv6_tree, IPV6_TREE);
288+
tnode = TreeAddIP(start, rtree->ipv6_tree, IPV6_TREE);
281289
}
282290
if (tnode == NULL) {
283291
*error_msg = apr_psprintf(rule->ruleset->mp, "Could not add entry \"%s\" in line %d of file %s to IP list", start, line, fn);
284292
}
285293
}
286294

287295
if (fd != NULL) apr_file_close(fd);
288-
rule->op_param_data = &rtree;
296+
rule->op_param_data = rtree;
289297
return 1;
290298
}
291299

@@ -303,7 +311,7 @@ static int msre_op_ipmatchFromFile_param_init(msre_rule *rule, char **error_msg)
303311
*/
304312

305313
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;
307315
struct in_addr in;
308316
#if APR_HAVE_IPV6
309317
struct in6_addr in6;

0 commit comments

Comments
 (0)