#! /bin/sh -e ## 07_log_to_file_by_default.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: No description. if [ $# -lt 1 ]; then echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1 fi [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" case "$1" in -patch) patch -p1 ${patch_opts} < $0;; -unpatch) patch -R -p1 ${patch_opts} < $0;; *) echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1;; esac exit 0 @DPATCH@ diff -u -d -r1.246 -r1.247 --- tor-0.1.1.9/src/or/dirserv.c 6 Oct 2005 04:33:40 -0000 1.246 +++ /tmp/dpep.YwfNhI/tor-0.1.1.9/src/or/dirserv.c 8 Oct 2005 06:02:41 -0000 1.247 @@ -731,6 +731,7 @@ dirserv_dump_directory_to_string(char **dir_out, crypto_pk_env_t *private_key) { + char *cp; char *router_status; char *identity_pkey; /* Identity key, DER64-encoded. */ char *recommended_versions; @@ -765,7 +766,7 @@ buf_len = 2048+strlen(recommended_versions)+ strlen(router_status); SMARTLIST_FOREACH(descriptor_list, routerinfo_t *, ri, - buf_len += ri->signed_descriptor_len); + buf_len += ri->signed_descriptor_len+1); buf = tor_malloc(buf_len); /* We'll be comparing against buf_len throughout the rest of the function, though strictly speaking we shouldn't be able to exceed @@ -785,9 +786,17 @@ tor_free(router_status); tor_free(identity_pkey); + cp = buf + strlen(buf); SMARTLIST_FOREACH(descriptor_list, routerinfo_t *, ri, - if (strlcat(buf, ri->signed_descriptor, buf_len) >= buf_len) - goto truncated); + { + if (cp+ri->signed_descriptor_len+1 >= buf+buf_len) + goto truncated; + memcpy(cp, ri->signed_descriptor, ri->signed_descriptor_len); + cp += ri->signed_descriptor_len; + *cp++ = '\n'; /* add an extra newline in case somebody was depending on + * it. */ + }); + *cp = '\0'; /* These multiple strlcat calls are inefficient, but dwarfed by the RSA signature.