tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 2663bca39246cdf54fe43593b2e632a7bbe9af97
parent aec359ef6264881545d5ff313071722479ecb0de
Author: teor <teor@torproject.org>
Date:   Tue, 25 Jun 2019 12:29:28 +1000

Merge branch 'bug30958_041' into bug30958_master

Diffstat:
Achanges/bug30958 | 5+++++
Msrc/feature/relay/router.c | 12+++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/changes/bug30958 b/changes/bug30958 @@ -0,0 +1,5 @@ + o Minor bugfixes (statistics): + - Stop removing the ed25519 signature if the extra info file is too big. + If the signature data was removed, but the keyword was kept, this could + result in an unparseable extra info file. Fixes bug 30958; + bugfix on 0.2.7.2-alpha. diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c @@ -3368,11 +3368,13 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo, while (strlen(s) > MAX_EXTRAINFO_UPLOAD_SIZE - DIROBJ_MAX_SIG_LEN) { /* So long as there are at least two chunks (one for the initial * extra-info line and one for the router-signature), we can keep removing - * things. */ - if (smartlist_len(chunks) > 2) { - /* We remove the next-to-last element (remember, len-1 is the last - element), since we need to keep the router-signature element. */ - int idx = smartlist_len(chunks) - 2; + * things. If emit_ed_sigs is true, we also keep 2 additional chunks at the + * end for the ed25519 signature. */ + const int required_chunks = emit_ed_sigs ? 4 : 2; + if (smartlist_len(chunks) > required_chunks) { + /* We remove the next-to-last or 4th-last element (remember, len-1 is the + * last element), since we need to keep the router-signature elements. */ + int idx = smartlist_len(chunks) - required_chunks; char *e = smartlist_get(chunks, idx); smartlist_del_keeporder(chunks, idx); log_warn(LD_GENERAL, "We just generated an extra-info descriptor "