mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-29 19:24:29 +03:00
Many null pointer checks
This commit is contained in:
66
apache2/re.c
66
apache2/re.c
@@ -57,6 +57,7 @@ static apr_status_t msre_rule_process(msre_rule *rule, modsec_rec *msr);
|
||||
* \param targets Exception list.
|
||||
*/
|
||||
static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *var, const char *exceptions) {
|
||||
assert(msr != NULL);
|
||||
const char *targets = NULL;
|
||||
char *savedptr = NULL, *target = NULL;
|
||||
char *c = NULL, *name = NULL, *value = NULL;
|
||||
@@ -64,9 +65,6 @@ static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *va
|
||||
char *myvalue = NULL, *myname = NULL;
|
||||
int match = 0;
|
||||
|
||||
if(msr == NULL)
|
||||
return 0;
|
||||
|
||||
if(var == NULL)
|
||||
return 0;
|
||||
|
||||
@@ -76,6 +74,8 @@ static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *va
|
||||
if(rule->actionset == NULL)
|
||||
return 0;
|
||||
|
||||
assert(exceptions != NULL);
|
||||
|
||||
{
|
||||
|
||||
myvar = apr_pstrdup(msr->mp, var->name);
|
||||
@@ -162,6 +162,7 @@ static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *va
|
||||
* \param p3 Pointer to configuration option REPLACED_TARGET
|
||||
*/
|
||||
char *msre_ruleset_rule_update_target_matching_exception(modsec_rec *msr, msre_ruleset *ruleset, rule_exception *re, const char *p2, const char *p3) {
|
||||
assert(msr != NULL);
|
||||
char *err;
|
||||
|
||||
if(ruleset == NULL)
|
||||
@@ -203,6 +204,8 @@ char *msre_ruleset_phase_rule_update_target_matching_exception(modsec_rec *msr,
|
||||
apr_array_header_t *phase_arr, const char *p2,
|
||||
const char *p3)
|
||||
{
|
||||
assert(msr != NULL);
|
||||
assert(ruleset != NULL);
|
||||
msre_rule **rules;
|
||||
int i, j, mode;
|
||||
char *err;
|
||||
@@ -238,6 +241,8 @@ char *msre_ruleset_phase_rule_update_target_matching_exception(modsec_rec *msr,
|
||||
|
||||
char *update_rule_target_ex(modsec_rec *msr, msre_ruleset *ruleset, msre_rule *rule, const char *p2,
|
||||
const char *p3) {
|
||||
assert(msr != NULL);
|
||||
assert(ruleset != NULL);
|
||||
|
||||
msre_var **targets = NULL;
|
||||
const char *current_targets = NULL;
|
||||
@@ -948,6 +953,9 @@ msre_var *msre_create_var_ex(apr_pool_t *pool, msre_engine *engine, const char *
|
||||
static msre_var *msre_create_var(msre_ruleset *ruleset, const char *name, const char *param,
|
||||
modsec_rec *msr, char **error_msg)
|
||||
{
|
||||
assert(msr != NULL);
|
||||
assert(ruleset != NULL);
|
||||
assert(error_msg != NULL);
|
||||
msre_var *var = msre_create_var_ex(ruleset->mp, ruleset->engine, name, param, msr, error_msg);
|
||||
if (var == NULL) return NULL;
|
||||
|
||||
@@ -1549,6 +1557,7 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
|
||||
#if defined(PERFORMANCE_MEASUREMENT)
|
||||
apr_time_t time1 = 0;
|
||||
#endif
|
||||
assert(rule->actionset != NULL);
|
||||
|
||||
/* Reset the rule interception flag */
|
||||
msr->rule_was_intercepted = 0;
|
||||
@@ -1767,11 +1776,11 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
|
||||
fn = apr_psprintf(p, " [file \"%s\"] [line \"%d\"]", rule->filename, rule->line_num);
|
||||
}
|
||||
|
||||
if (rule->actionset != NULL && rule->actionset->id != NULL) {
|
||||
if (rule->actionset->id != NULL) {
|
||||
id = apr_psprintf(p, " [id \"%s\"]", rule->actionset->id);
|
||||
}
|
||||
|
||||
if (rule->actionset != NULL && rule->actionset->rev != NULL) {
|
||||
if (rule->actionset->rev != NULL) {
|
||||
rev = apr_psprintf(p, " [rev \"%s\"]", rule->actionset->rev);
|
||||
}
|
||||
|
||||
@@ -1905,13 +1914,11 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
|
||||
else if (rc < 0) {
|
||||
const char *id = "";
|
||||
const char *msg = "";
|
||||
if (rule->actionset) {
|
||||
if (rule->actionset->id) {
|
||||
id = rule->actionset->id;
|
||||
}
|
||||
if (rule->actionset->msg) {
|
||||
msg = rule->actionset->msg;
|
||||
}
|
||||
if (rule->actionset->id) {
|
||||
id = rule->actionset->id;
|
||||
}
|
||||
if (rule->actionset->msg) {
|
||||
msg = rule->actionset->msg;
|
||||
}
|
||||
msr_log(msr, 1, "Rule processing failed (id=%s, msg=%s).", id, msg);
|
||||
|
||||
@@ -1919,7 +1926,7 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
|
||||
apr_table_clear(msr->matched_vars);
|
||||
return -1;
|
||||
} else {
|
||||
if (rule->actionset && rule->actionset->is_chained) {
|
||||
if (rule->actionset->is_chained) {
|
||||
/* If the current rule is part of a chain then
|
||||
* we need to skip over all the rules in the chain.
|
||||
*/
|
||||
@@ -1945,13 +1952,11 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_re
|
||||
else {
|
||||
const char *id = "";
|
||||
const char *msg = "";
|
||||
if (rule->actionset) {
|
||||
if (rule->actionset->id) {
|
||||
id = rule->actionset->id;
|
||||
}
|
||||
if (rule->actionset->msg) {
|
||||
msg = rule->actionset->msg;
|
||||
}
|
||||
if (rule->actionset->id) {
|
||||
id = rule->actionset->id;
|
||||
}
|
||||
if (rule->actionset->msg) {
|
||||
msg = rule->actionset->msg;
|
||||
}
|
||||
msr_log(msr, 1, "Rule processing failed with unknown return code: %d (id=%s, msg=%s).", rc, id, msg);
|
||||
apr_table_clear(msr->matched_vars);
|
||||
@@ -2091,6 +2096,8 @@ static int msre_ruleset_phase_rule_remove_with_exception(msre_ruleset *ruleset,
|
||||
rules = (msre_rule **)phase_arr->elts;
|
||||
for (i = 0; i < phase_arr->nelts; i++) {
|
||||
msre_rule *rule = (msre_rule *)rules[i];
|
||||
assert(rule != NULL);
|
||||
assert(rule->actionset != NULL);
|
||||
|
||||
if (mode == 0) { /* Looking for next rule. */
|
||||
int remove_rule = 0;
|
||||
@@ -2099,7 +2106,7 @@ static int msre_ruleset_phase_rule_remove_with_exception(msre_ruleset *ruleset,
|
||||
if (rule->placeholder == RULE_PH_NONE) {
|
||||
switch(re->type) {
|
||||
case RULE_EXCEPTION_REMOVE_ID :
|
||||
if ((rule->actionset != NULL)&&(rule->actionset->id != NULL)) {
|
||||
if (rule->actionset->id != NULL) {
|
||||
int ruleid = atoi(rule->actionset->id);
|
||||
|
||||
if (rule_id_in_range(ruleid, re->param)) {
|
||||
@@ -2152,9 +2159,9 @@ static int msre_ruleset_phase_rule_remove_with_exception(msre_ruleset *ruleset,
|
||||
if (remove_rule) {
|
||||
/* Do not increment j. */
|
||||
removed_count++;
|
||||
if (rule->actionset && rule->actionset->is_chained) mode = 2; /* Remove rules in this chain. */
|
||||
if (rule->actionset->is_chained) mode = 2; /* Remove rules in this chain. */
|
||||
} else {
|
||||
if (rule->actionset && rule->actionset->is_chained) mode = 1; /* Keep rules in this chain. */
|
||||
if (rule->actionset->is_chained) mode = 1; /* Keep rules in this chain. */
|
||||
rules[j++] = rules[i];
|
||||
}
|
||||
} else { /* Handling rule that is part of a chain. */
|
||||
@@ -2211,6 +2218,7 @@ static const char *msre_format_severity(int severity) {
|
||||
* Creates a string containing the metadata of the supplied rule.
|
||||
*/
|
||||
char *msre_format_metadata(modsec_rec *msr, msre_actionset *actionset) {
|
||||
assert(msr != NULL);
|
||||
const apr_array_header_t *tarr;
|
||||
const apr_table_entry_t *telts;
|
||||
char *id = "";
|
||||
@@ -2507,6 +2515,8 @@ msre_rule *msre_rule_lua_create(msre_ruleset *ruleset,
|
||||
static void msre_perform_nondisruptive_actions(modsec_rec *msr, msre_rule *rule,
|
||||
msre_actionset *actionset, apr_pool_t *mptmp)
|
||||
{
|
||||
assert(msr != NULL);
|
||||
assert(actionset != NULL);
|
||||
const apr_array_header_t *tarr;
|
||||
const apr_table_entry_t *telts;
|
||||
int i;
|
||||
@@ -2529,6 +2539,8 @@ static void msre_perform_nondisruptive_actions(modsec_rec *msr, msre_rule *rule,
|
||||
static void msre_perform_disruptive_actions(modsec_rec *msr, msre_rule *rule,
|
||||
msre_actionset *actionset, apr_pool_t *mptmp, const char *message)
|
||||
{
|
||||
assert(msr != NULL);
|
||||
assert(actionset != NULL);
|
||||
const apr_array_header_t *tarr;
|
||||
const apr_table_entry_t *telts;
|
||||
int i;
|
||||
@@ -2613,6 +2625,14 @@ static void msre_perform_disruptive_actions(modsec_rec *msr, msre_rule *rule,
|
||||
static int execute_operator(msre_var *var, msre_rule *rule, modsec_rec *msr,
|
||||
msre_actionset *acting_actionset, apr_pool_t *mptmp)
|
||||
{
|
||||
assert(var != NULL);
|
||||
assert(rule != NULL);
|
||||
assert(rule->actionset != NULL);
|
||||
assert(rule->op_metadata != NULL);
|
||||
assert(rule->op_metadata->execute != NULL);
|
||||
assert(msr != NULL);
|
||||
assert(acting_actionset != NULL);
|
||||
assert(mptmp != NULL);
|
||||
apr_time_t time_before_op = 0;
|
||||
char *my_error_msg = NULL;
|
||||
const char *full_varname = NULL;
|
||||
|
Reference in New Issue
Block a user