diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 063d5ea872..21163cf0c2 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -850,8 +850,14 @@ rend_service_intro_has_opened(origin_circuit_t *circuit) else intro_key = circuit->intro_key; /* Build the payload for a RELAY_ESTABLISH_INTRO cell. */ - len = crypto_pk_asn1_encode(intro_key, buf+2, - RELAY_PAYLOAD_SIZE-2); + r = crypto_pk_asn1_encode(intro_key, buf+2, + RELAY_PAYLOAD_SIZE-2); + if (r < 0) { + log_warn(LD_BUG, "Internal error; failed to establish intro point."); + reason = END_CIRC_REASON_INTERNAL; + goto err; + } + len = r; set_uint16(buf, htons((uint16_t)len)); len += 2; memcpy(auth, circuit->cpath->prev->handshake_digest, DIGEST_LEN);