diff options
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | src/libs/libdriver/input.cpp | 9 |
2 files changed, 26 insertions, 4 deletions
@@ -1,3 +1,24 @@ +2010-05-09 Colin Watson <cjwatson@debian.org> + + Handle ditroff command `Dt' without argument gracefully. + + Without this patch, grotty goes into an infinite loop if it tries to + process + + x T utf8 + x res 240 24 40 + x init + p1 + Dt + + * src/libs/libdriver/input.cpp (get_integer_arg): Emit a fatal error + on a non-integer argument, bringing the code into line with the + behaviour documented in the header comment. + (get_possibly_integer_args): Terminate the loop on a non-integer + argument. + (next_arg_begin): Return newline or EOF after emitting the + corresponding error, rather than continuing on to the next line. + 2010-05-01 Werner LEMBERG <wl@gnu.org> * doc/groff.texinfo: Improve documentation of \R escape. diff --git a/src/libs/libdriver/input.cpp b/src/libs/libdriver/input.cpp index ae68e86d..3d837882 100644 --- a/src/libs/libdriver/input.cpp +++ b/src/libs/libdriver/input.cpp @@ -3,13 +3,13 @@ // <groff_src_dir>/src/libs/libdriver/input.cpp /* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005, - 2006, 2008, 2009 + 2006, 2008, 2009, 2010 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) Major rewrite 2001 by Bernd Warken (bwarken@mayn.de) - Last update: 5 Jan 2009 + Last update: 9 May 2010 This file is part of groff, the GNU roff text processing system. @@ -790,7 +790,7 @@ get_integer_arg(void) c = get_char(); } if (!isdigit((int) c)) - error("integer argument expected"); + fatal("integer argument expected"); while (isdigit((int) c)) { buf.append(c); c = get_char(); @@ -879,6 +879,7 @@ get_possibly_integer_args() break; default: error("integer argument expected"); + done = true; break; } } @@ -946,7 +947,7 @@ next_arg_begin(void) case '\n': case EOF: error("missing argument"); - break; + return c; default: // first essential character return c; } |