log_fn(LOG_WARN, "Missing onion key"); goto err;
} /* XXX Check key length */
router->onion_pkey = tok->val.public_key;
+ tok->val.public_key = NULL; /* Prevent free */
NEXT_TOKEN();
if (tok->tp != K_LINK_KEY) {
log_fn(LOG_WARN, "Missing link key"); goto err;
} /* XXX Check key length */
router->link_pkey = tok->val.public_key;
+ tok->val.public_key = NULL; /* Prevent free */
NEXT_TOKEN();
if (tok->tp != K_SIGNING_KEY) {
log_fn(LOG_WARN, "Missing signing key"); goto err;
}
router->identity_pkey = tok->val.public_key;
+ tok->val.public_key = NULL; /* Prevent free */
NEXT_TOKEN();
while (tok->tp == K_ACCEPT || tok->tp == K_REJECT) {
switch (tok->tp)
{
case _SIGNATURE:
- free(tok->val.signature);
+ if (tok->val.signature)
+ free(tok->val.signature);
break;
case _PUBLIC_KEY:
- crypto_free_pk_env(tok->val.public_key);
+ if (tok->val.public_key)
+ crypto_free_pk_env(tok->val.public_key);
break;
case _ERR:
case _EOF: