Add missing return value evaluation in port parsing and fix broken unittest.

remotes/origin/master-1.0.x
Victor Julien 17 years ago
parent b3bcba077f
commit 2481f2102b

@ -991,6 +991,7 @@ static int DetectPortParseDo(DetectPort **head, DetectPort **nhead, char *s,
char address[1024] = "";
char *rule_var_port = NULL;
char *temp_rule_var_port = NULL;
int r = 0;
SCLogDebug("head %p, *head %p, negate %d", head, *head, negate);
@ -1020,7 +1021,10 @@ static int DetectPortParseDo(DetectPort **head, DetectPort **nhead, char *s,
SCLogDebug("Parsed port from DetectPortParseDo - %s", address);
x = 0;
DetectPortParseDo(head, nhead, address, negate? negate: n_set);
r = DetectPortParseDo(head, nhead, address, negate? negate: n_set);
if (r == -1)
goto error;
n_set = 0;
}
depth--;
@ -1045,8 +1049,11 @@ static int DetectPortParseDo(DetectPort **head, DetectPort **nhead, char *s,
snprintf(temp_rule_var_port, strlen(rule_var_port) + 3,
"[%s]", rule_var_port);
}
DetectPortParseDo(head, nhead, temp_rule_var_port,
r = DetectPortParseDo(head, nhead, temp_rule_var_port,
(negate + n_set) % 2);//negate? negate: n_set);
if (r == -1)
goto error;
d_set = 0;
n_set = 0;
if (temp_rule_var_port != rule_var_port)
@ -1056,10 +1063,13 @@ static int DetectPortParseDo(DetectPort **head, DetectPort **nhead, char *s,
SCLogDebug("Parsed port from DetectPortParseDo - %s", address);
if (negate == 0 && n_set == 0) {
DetectPortParseInsertString(head, address);
r = DetectPortParseInsertString(head, address);
} else {
DetectPortParseInsertString(nhead, address);
r = DetectPortParseInsertString(nhead, address);
}
if (r == -1)
goto error;
n_set = 0;
}
x = 0;
@ -1086,17 +1096,22 @@ static int DetectPortParseDo(DetectPort **head, DetectPort **nhead, char *s,
snprintf(temp_rule_var_port, strlen(rule_var_port) + 3,
"[%s]", rule_var_port);
}
DetectPortParseDo(head, nhead, temp_rule_var_port,
r = DetectPortParseDo(head, nhead, temp_rule_var_port,
(negate + n_set) % 2);
if (r == -1)
goto error;
d_set = 0;
if (temp_rule_var_port != rule_var_port)
free(temp_rule_var_port);
} else {
if (!((negate + n_set) % 2)) {
DetectPortParseInsertString(head,address);
r = DetectPortParseInsertString(head,address);
} else {
DetectPortParseInsertString(nhead,address);
r = DetectPortParseInsertString(nhead,address);
}
if (r == -1)
goto error;
}
n_set = 0;
}

@ -603,6 +603,8 @@ void SigFree(Signature *s) {
* \retval Pointer to the Signature instance on success; NULL on failure
*/
Signature *SigInit(DetectEngineCtx *de_ctx, char *sigstr) {
SCEnter();
Signature *sig = SigAlloc();
if (sig == NULL)
goto error;
@ -685,7 +687,7 @@ Signature *SigInit(DetectEngineCtx *de_ctx, char *sigstr) {
sig->id, sig->flags & SIG_FLAG_APPLAYER ? "set" : "not set",
sig->flags & SIG_FLAG_PACKET ? "set" : "not set");
return sig;
SCReturnPtr(sig, "Signature");
error:
if ( sig != NULL ) SigFree(sig);
@ -693,7 +695,7 @@ error:
SCLogError(SC_ERR_INVALID_SIGNATURE,"Signature parsing failed: \"%s\"", sigstr);
exit(EXIT_FAILURE);
}
return NULL;
SCReturnPtr(NULL,"Signature");
}
/**
@ -998,7 +1000,7 @@ end:
/** \test Port validation */
int SigParseTest05 (void) {
int result = 1;
int result = 0;
Signature *sig = NULL;
DetectEngineCtx *de_ctx = DetectEngineCtxInit();
@ -1006,8 +1008,11 @@ int SigParseTest05 (void) {
goto end;
sig = SigInit(de_ctx, "alert tcp 1.2.3.4 1024:65536 -> !1.2.3.4 any (msg:\"SigParseTest05\"; sid:1;)");
if (sig != NULL)
if (sig == NULL) {
result = 1;
} else {
printf("signature didn't fail to parse as we expected: ");
}
end:
if (sig != NULL) SigFree(sig);

Loading…
Cancel
Save