diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2015-01-01 19:28:49 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2015-01-01 19:28:49 +0000 |
commit | 5cdf519064e2a4e99ff35d500e68650cc82dfa4e (patch) | |
tree | 7c9240853783cdf44298625b2d2ef419f90104cc /roff.c | |
parent | 031d1f01fc925d18b3af6e51565d51044023590b (diff) | |
download | mandoc-5cdf519064e2a4e99ff35d500e68650cc82dfa4e.tar.gz mandoc-5cdf519064e2a4e99ff35d500e68650cc82dfa4e.tar.zst mandoc-5cdf519064e2a4e99ff35d500e68650cc82dfa4e.zip |
Fix a buffer overrun triggered by a trailing backslash at EOF in
an unclosed conditional body. If the memory contained the byte
sequence "\}" after the end of the buffer before the next NUL, this
could even write beyond the end of the buffer, specifically '&' to
the location of the '}'. Found by jsg@ with afl.
Diffstat (limited to 'roff.c')
-rw-r--r-- | roff.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -1,7 +1,7 @@ -/* $Id: roff.c,v 1.246 2014/12/28 14:16:26 schwarze Exp $ */ +/* $Id: roff.c,v 1.247 2015/01/01 19:28:49 schwarze Exp $ */ /* - * Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2010, 2011, 2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv> + * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -1163,7 +1163,8 @@ roff_cond_sub(ROFF_ARGS) *ep = '&'; roff_ccond(r, ln, ep - buf->buf - 1); } - ++ep; + if (*ep != '\0') + ++ep; } return(rr ? ROFF_CONT : ROFF_IGN); } @@ -1183,7 +1184,8 @@ roff_cond_text(ROFF_ARGS) *ep = '&'; roff_ccond(r, ln, ep - buf->buf - 1); } - ++ep; + if (*ep != '\0') + ++ep; } return(rr ? ROFF_CONT : ROFF_IGN); } |