summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug282024
-rw-r--r--src/or/routerparse.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/changes/bug28202 b/changes/bug28202
new file mode 100644
index 0000000000..182daac4f1
--- /dev/null
+++ b/changes/bug28202
@@ -0,0 +1,4 @@
+ o Minor bugfixes (C correctness):
+ - Avoid undefined behavior in an end-of-string check when parsing the
+ BEGIN line in a directory object. Fixes bug 28202; bugfix on
+ 0.2.0.3-alpha.
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 521e237be2..063cbbcdaf 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -4964,7 +4964,7 @@ get_next_token(memarea_t *area,
goto check_object;
obstart = *s; /* Set obstart to start of object spec */
- if (*s+16 >= eol || memchr(*s+11,'\0',eol-*s-16) || /* no short lines, */
+ if (eol - *s <= 16 || memchr(*s+11,'\0',eol-*s-16) || /* no short lines, */
strcmp_len(eol-5, "-----", 5) || /* nuls or invalid endings */
(eol-*s) > MAX_UNPARSED_OBJECT_SIZE) { /* name too long */
RET_ERR("Malformed object: bad begin line");