static int SigParseOptions(DetectEngineCtx *de_ctx, Signature *s, char *optstr, char *output, size_t output_size)
{
SigTableElmt *st = NULL;
- char optname[64];
- char optvalue[DETECT_MAX_RULE_SIZE] = "";
+ char *optname = NULL;
+ char *optvalue = NULL;
/* Trim leading space. */
while (isblank(*optstr)) {
}
}
- strlcpy(optvalue, optvalptr, sizeof(optvalue));
+ optvalue = optvalptr;
}
/* Trim trailing space from name. */
break;
}
}
- strlcpy(optname, optstr, sizeof(optname));
+ optname = optstr;
/* Call option parsing */
st = SigTableGet(optname);
}
if (!(st->flags & (SIGMATCH_NOOPT|SIGMATCH_OPTIONAL_OPT))) {
- if (strlen(optvalue) == 0) {
+ if (optvalue == NULL || strlen(optvalue) == 0) {
SCLogError(SC_ERR_INVALID_SIGNATURE, "invalid formatting or malformed option to %s keyword: \'%s\'",
optname, optstr);
goto error;
s->init_data->negated = false;
/* Validate double quoting, trimming trailing white space along the way. */
- if (strlen(optvalue) > 0) {
+ if (optvalue != NULL && strlen(optvalue) > 0) {
size_t ovlen = strlen(optvalue);
char *ptr = optvalue;