@@ -203,6 +203,7 @@ char *msre_ruleset_phase_rule_update_target_matching_exception(modsec_rec *msr,
203
203
const char * p3 )
204
204
{
205
205
assert (ruleset != NULL );
206
+ assert (phase_arr != NULL );
206
207
msre_rule * * rules ;
207
208
int i , j , mode ;
208
209
char * err ;
@@ -212,7 +213,10 @@ char *msre_ruleset_phase_rule_update_target_matching_exception(modsec_rec *msr,
212
213
rules = (msre_rule * * )phase_arr -> elts ;
213
214
for (i = 0 ; i < phase_arr -> nelts ; i ++ ) {
214
215
msre_rule * rule = (msre_rule * )rules [i ];
216
+ assert (rule != NULL );
217
+
215
218
if (mode == 0 ) { /* Looking for next rule. */
219
+ assert (rule -> actionset != NULL );
216
220
if (msre_ruleset_rule_matches_exception (rule , re )) {
217
221
err = update_rule_target_ex (msr , ruleset , rule , p2 , p3 );
218
222
if (err ) return err ;
@@ -527,10 +531,12 @@ char *update_rule_target_ex(modsec_rec *msr, msre_ruleset *ruleset, msre_rule *r
527
531
}
528
532
529
533
int msre_ruleset_rule_matches_exception (msre_rule * rule , rule_exception * re ) {
534
+ assert (rule != NULL );
530
535
int match = 0 ;
531
536
532
537
/* Only remove non-placeholder rules */
533
538
if (rule -> placeholder == RULE_PH_NONE ) {
539
+ assert (re != NULL );
534
540
switch (re -> type ) {
535
541
case RULE_EXCEPTION_REMOVE_ID :
536
542
if ((rule -> actionset != NULL )&& (rule -> actionset -> id != NULL )) {
@@ -1468,6 +1474,7 @@ apr_status_t msre_ruleset_process_phase(msre_ruleset *ruleset, modsec_rec *msr)
1468
1474
rules = (msre_rule * * )arr -> elts ;
1469
1475
for (i = 0 ; i < arr -> nelts ; i ++ ) {
1470
1476
msre_rule * rule = rules [i ];
1477
+ assert (rule != NULL );
1471
1478
rule -> execution_time = 0 ;
1472
1479
}
1473
1480
@@ -1480,6 +1487,7 @@ apr_status_t msre_ruleset_process_phase(msre_ruleset *ruleset, modsec_rec *msr)
1480
1487
rules = (msre_rule * * )arr -> elts ;
1481
1488
for (i = 0 ; i < arr -> nelts ; i ++ ) {
1482
1489
msre_rule * rule = rules [i ];
1490
+ assert (rule != NULL );
1483
1491
1484
1492
/* Ignore markers, which are never processed. */
1485
1493
if (rule -> placeholder == RULE_PH_MARKER ) continue ;
@@ -1498,6 +1506,8 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
1498
1506
#else
1499
1507
apr_status_t msre_ruleset_process_phase (msre_ruleset * ruleset , modsec_rec * msr ) {
1500
1508
#endif
1509
+ assert (ruleset != NULL );
1510
+ assert (msr != NULL );
1501
1511
apr_array_header_t * arr = NULL ;
1502
1512
msre_rule * * rules ;
1503
1513
apr_status_t rc ;
@@ -1542,10 +1552,11 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
1542
1552
rules = (msre_rule * * )arr -> elts ;
1543
1553
for (i = 0 ; i < arr -> nelts ; i ++ ) {
1544
1554
msre_rule * rule = rules [i ];
1555
+ assert (rule != NULL );
1556
+ assert (rule -> actionset != NULL );
1545
1557
#if defined(PERFORMANCE_MEASUREMENT )
1546
1558
apr_time_t time1 = 0 ;
1547
1559
#endif
1548
- assert (rule -> actionset != NULL );
1549
1560
1550
1561
/* Reset the rule interception flag */
1551
1562
msr -> rule_was_intercepted = 0 ;
@@ -1974,6 +1985,9 @@ msre_ruleset *msre_ruleset_create(msre_engine *engine, apr_pool_t *mp) {
1974
1985
* Adds one rule to the given phase of the ruleset.
1975
1986
*/
1976
1987
int msre_ruleset_rule_add (msre_ruleset * ruleset , msre_rule * rule , int phase ) {
1988
+ assert (ruleset != NULL );
1989
+ assert (rule != NULL );
1990
+ assert (rule -> actionset != NULL );
1977
1991
apr_array_header_t * arr = NULL ;
1978
1992
1979
1993
switch (phase ) {
@@ -2011,6 +2025,8 @@ int msre_ruleset_rule_add(msre_ruleset *ruleset, msre_rule *rule, int phase) {
2011
2025
static msre_rule * msre_ruleset_fetch_phase_rule (const msre_ruleset * ruleset , const char * id ,
2012
2026
const apr_array_header_t * phase_arr , int offset )
2013
2027
{
2028
+ assert (id != NULL );
2029
+ assert (phase_arr != NULL );
2014
2030
msre_rule * * rules = (msre_rule * * )phase_arr -> elts ;
2015
2031
int i ;
2016
2032
@@ -2067,6 +2083,7 @@ msre_rule * msre_ruleset_fetch_rule(msre_ruleset *ruleset, const char *id, int o
2067
2083
static int msre_ruleset_phase_rule_remove_with_exception (msre_ruleset * ruleset , rule_exception * re ,
2068
2084
apr_array_header_t * phase_arr )
2069
2085
{
2086
+ assert (phase_arr != NULL );
2070
2087
msre_rule * * rules ;
2071
2088
int i , j , mode , removed_count ;
2072
2089
@@ -2084,6 +2101,7 @@ static int msre_ruleset_phase_rule_remove_with_exception(msre_ruleset *ruleset,
2084
2101
2085
2102
/* Only remove non-placeholder rules */
2086
2103
if (rule -> placeholder == RULE_PH_NONE ) {
2104
+ assert (re != NULL );
2087
2105
switch (re -> type ) {
2088
2106
case RULE_EXCEPTION_REMOVE_ID :
2089
2107
if (rule -> actionset -> id != NULL ) {
@@ -2304,6 +2322,7 @@ char *msre_format_metadata(modsec_rec *msr, msre_actionset *actionset) {
2304
2322
char * msre_rule_generate_unparsed (apr_pool_t * pool , const msre_rule * rule , const char * targets ,
2305
2323
const char * args , const char * actions )
2306
2324
{
2325
+ assert (rule != NULL );
2307
2326
char * unparsed = NULL ;
2308
2327
const char * r_targets = targets ;
2309
2328
const char * r_args = args ;
@@ -2363,12 +2382,19 @@ msre_rule *msre_rule_create(msre_ruleset *ruleset, int type,
2363
2382
const char * fn , int line , const char * targets ,
2364
2383
const char * args , const char * actions , char * * error_msg )
2365
2384
{
2385
+ assert (ruleset != NULL );
2386
+ assert (args != NULL );
2387
+ assert (error_msg != NULL );
2388
+ // Normally useless code, left to be safe for the moment
2389
+ if (error_msg == NULL ) {
2390
+ ap_log_perror (APLOG_MARK , APLOG_EMERG , 0 , ruleset -> mp , NULL , "msre_rule_create: error_msg is NULL" );
2391
+ return NULL ;
2392
+ }
2366
2393
msre_rule * rule ;
2367
2394
char * my_error_msg ;
2368
2395
const char * argsp ;
2369
2396
int rc ;
2370
2397
2371
- if (error_msg == NULL ) return NULL ;
2372
2398
* error_msg = NULL ;
2373
2399
2374
2400
rule = (msre_rule * )apr_pcalloc (ruleset -> mp , sizeof (msre_rule ));
@@ -2521,6 +2547,8 @@ static void msre_perform_disruptive_actions(modsec_rec *msr, msre_rule *rule,
2521
2547
{
2522
2548
assert (msr != NULL );
2523
2549
assert (actionset != NULL );
2550
+ assert (actionset -> intercept_action_rec != NULL );
2551
+ assert (actionset -> intercept_action_rec -> metadata != NULL );
2524
2552
const apr_array_header_t * tarr ;
2525
2553
const apr_table_entry_t * telts ;
2526
2554
int i ;
@@ -2534,6 +2562,7 @@ static void msre_perform_disruptive_actions(modsec_rec *msr, msre_rule *rule,
2534
2562
telts = (const apr_table_entry_t * )tarr -> elts ;
2535
2563
for (i = 0 ; i < tarr -> nelts ; i ++ ) {
2536
2564
msre_action * action = (msre_action * )telts [i ].val ;
2565
+ assert (action -> metadata != NULL );
2537
2566
if (action -> metadata -> type == ACTION_DISRUPTIVE ) {
2538
2567
if (action -> metadata -> execute != NULL ) {
2539
2568
action -> metadata -> execute (msr , mptmp , rule , action );
@@ -2797,6 +2826,11 @@ static int execute_operator(msre_var *var, msre_rule *rule, modsec_rec *msr,
2797
2826
* Executes rule against the given transaction.
2798
2827
*/
2799
2828
static apr_status_t msre_rule_process_normal (msre_rule * rule , modsec_rec * msr ) {
2829
+ assert (rule != NULL );
2830
+ assert (rule -> actionset != NULL );
2831
+ assert (rule -> targets != NULL );
2832
+ assert (msr != NULL );
2833
+ assert (msr -> txcfg != NULL );
2800
2834
const apr_array_header_t * arr = NULL ;
2801
2835
const apr_table_entry_t * te = NULL ;
2802
2836
msre_actionset * acting_actionset = NULL ;
@@ -3343,6 +3377,8 @@ static apr_status_t msre_rule_process_normal(msre_rule *rule, modsec_rec *msr) {
3343
3377
*
3344
3378
*/
3345
3379
static apr_status_t msre_rule_process_lua (msre_rule * rule , modsec_rec * msr ) {
3380
+ assert (rule != NULL );
3381
+ assert (msr != NULL );
3346
3382
msre_actionset * acting_actionset = NULL ;
3347
3383
char * my_error_msg = NULL ;
3348
3384
int rc ;
@@ -3380,6 +3416,7 @@ static apr_status_t msre_rule_process_lua(msre_rule *rule, modsec_rec *msr) {
3380
3416
*
3381
3417
*/
3382
3418
static apr_status_t msre_rule_process (msre_rule * rule , modsec_rec * msr ) {
3419
+ assert (msr != NULL );
3383
3420
/* Use a fresh memory sub-pool for processing each rule */
3384
3421
if (msr -> msc_rule_mptmp == NULL ) {
3385
3422
if (apr_pool_create (& msr -> msc_rule_mptmp , msr -> mp ) != APR_SUCCESS ) {
0 commit comments