aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/roff.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-12-18 17:43:41 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-12-18 17:43:41 +0000
commit22bd6b000952af1c83addbfd529269c26dd87c3a (patch)
treec7981d59566c0dcf497f47a1c3058f074bc6aae1 /roff.c
parentbcb96064a93b17d1c9126fb86a01ede2ca704c61 (diff)
downloadmandoc-22bd6b000952af1c83addbfd529269c26dd87c3a.tar.gz
mandoc-22bd6b000952af1c83addbfd529269c26dd87c3a.tar.zst
mandoc-22bd6b000952af1c83addbfd529269c26dd87c3a.zip
Don't let the modulo operator divide by zero.
Found by jsg@ with afl.
Diffstat (limited to 'roff.c')
-rw-r--r--roff.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/roff.c b/roff.c
index d2b2d85b..992d9772 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.243 2014/12/16 23:44:41 schwarze Exp $ */
+/* $Id: roff.c,v 1.244 2014/12/18 17:43:41 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1576,7 +1576,7 @@ roff_evalnum(struct roff *r, int ln, const char *v,
*res *= operand2;
break;
case '/':
- if (0 == operand2) {
+ if (operand2 == 0) {
mandoc_msg(MANDOCERR_DIVZERO,
r->parse, ln, *pos, v);
*res = 0;
@@ -1585,6 +1585,12 @@ roff_evalnum(struct roff *r, int ln, const char *v,
*res /= operand2;
break;
case '%':
+ if (operand2 == 0) {
+ mandoc_msg(MANDOCERR_DIVZERO,
+ r->parse, ln, *pos, v);
+ *res = 0;
+ break;
+ }
*res %= operand2;
break;
case '<':