signature-params: Only modify passed params if parsing succeeded

This avoids issues if a caller doesn't expect e.g. the scheme to get
modified on failure.
This commit is contained in:
Tobias Brunner
2026-07-24 08:47:39 +02:00
parent 459fcabd9e
commit eb6fd8a8f7
@@ -186,13 +186,13 @@ void signature_params_clear(signature_params_t *this)
bool signature_params_parse(chunk_t asn1, int level0, bool signature_params_parse(chunk_t asn1, int level0,
signature_params_t *params) signature_params_t *params)
{ {
signature_params_t parsed = {};
chunk_t parameters = chunk_empty; chunk_t parameters = chunk_empty;
int oid; int oid;
oid = asn1_parse_algorithmIdentifier(asn1, level0, &parameters); oid = asn1_parse_algorithmIdentifier(asn1, level0, &parameters);
params->scheme = signature_scheme_from_oid(oid); parsed.scheme = signature_scheme_from_oid(oid);
params->params = NULL; switch (parsed.scheme)
switch (params->scheme)
{ {
case SIGN_UNKNOWN: case SIGN_UNKNOWN:
return FALSE; return FALSE;
@@ -206,7 +206,7 @@ bool signature_params_parse(chunk_t asn1, int level0,
free(pss); free(pss);
return FALSE; return FALSE;
} }
params->params = pss; parsed.params = pss;
break; break;
} }
default: default:
@@ -214,11 +214,12 @@ bool signature_params_parse(chunk_t asn1, int level0,
!chunk_equals(parameters, chunk_from_chars(0x05, 0x00))) !chunk_equals(parameters, chunk_from_chars(0x05, 0x00)))
{ {
DBG1(DBG_IKE, "unexpected parameters for %N", DBG1(DBG_IKE, "unexpected parameters for %N",
signature_scheme_names, params->scheme); signature_scheme_names, parsed.scheme);
return FALSE; return FALSE;
} }
break; break;
} }
*params = parsed;
return TRUE; return TRUE;
} }