Rend_add_service() frees its argument on failure; no need to free again.
Fixes bug 16228, bugfix on 0.2.7.1-alpha
Found by coverity; this is CID
1301387.
--- /dev/null
+ o Minor bugfixes (hidden services):
+ - Avoid crashing with a double-free bug when we create an
+ ephemeral hidden service but adding it fails for some reason.
+ Fixes bug 16228; bugfix on 0.2.7.1-alpha.
}
/** Validate <b>service</b> and add it to rend_service_list if possible.
- * Return 0 on success and -1 on failure.
+ * Return 0 on success. On failure, free <b>service</b> and return -1.
*/
static int
rend_add_service(rend_service_t *service)
/* Initialize the service. */
if (rend_add_service(s)) {
- rend_service_free(s);
return RSAE_INTERNAL;
}
*service_id_out = tor_strdup(s->service_id);