Merge remote-tracking branch 'public/bug2954_more'

This commit is contained in:
Nick Mathewson 2012-05-31 12:22:02 -04:00
commit 11bf5585aa
2 changed files with 14 additions and 4 deletions

4
changes/bug2954_more Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes:
- If we fail to write a microdescriptor to disk, do not continue
replacing the old microdescriptor file. Fix for bug 2954; bugfix
on 0.2.2.6-alpha.

View File

@ -80,7 +80,12 @@ dump_microdescriptor(FILE *f, microdesc_t *md, size_t *annotation_len_out)
char annotation[ISO_TIME_LEN+32];
format_iso_time(buf, md->last_listed);
tor_snprintf(annotation, sizeof(annotation), "@last-listed %s\n", buf);
fputs(annotation, f);
if (fputs(annotation, f) < 0) {
log_warn(LD_DIR,
"Couldn't write microdescriptor annotation: %s",
strerror(ferror(f)));
return -1;
}
r += strlen(annotation);
*annotation_len_out = r;
} else {
@ -226,9 +231,10 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
size_t annotation_len;
size = dump_microdescriptor(f, md, &annotation_len);
if (size < 0) {
/* XXX handle errors from dump_microdescriptor() */
/* log? return -1? die? coredump the universe? */
continue;
/* we already warned in dump_microdescriptor; */
abort_writing_to_file(open_file);
smartlist_clear(added);
return added;
}
md->saved_location = SAVED_IN_JOURNAL;
cache->journal_len += size;