Reject most directory documents with an internal NUL.

(Specifically, we reject all the ones that aren't NUL-terminated,
since a NUL-terminated thing can't have a NUL in the middle.)

Another fix for #8037.
This commit is contained in:
Nick Mathewson 2013-03-15 13:49:04 -04:00
parent acd72d4e3e
commit 0cf2c01dbd
2 changed files with 12 additions and 1 deletions

View File

@ -2,3 +2,7 @@
- Correctly store microdescriptors and extrainfo descriptors with
an internal NUL byte. Fixes bug 8037; bugfix on 0.2.0.1-alpha.
Bug reported by "cypherpunks".
o Minor features:
- Reject as invalid most directory objects containing a
NUL. Belt-and-suspender fix for bug 8037.

View File

@ -3902,8 +3902,15 @@ tokenize_string(memarea_t *area,
tor_assert(area);
s = &start;
if (!end)
if (!end) {
end = start+strlen(start);
} else {
/* it's only meaningful to check for nuls if we got an end-of-string ptr */
if (memchr(start, '\0', end-start)) {
log_warn(LD_DIR, "parse error: internal NUL character.");
return -1;
}
}
for (i = 0; i < NIL_; ++i)
counts[i] = 0;