summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/rendservice.c10
1 files changed, 8 insertions, 2 deletions
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);