]> git.cameronkatri.com Git - mandoc.git/blobdiff - roff.c
downgrade ".so with absolute path" from FATAL to ERROR;
[mandoc.git] / roff.c
diff --git a/roff.c b/roff.c
index ab1cbfeaae8244175c640867f0dc9754bbbc4ea2..8721a6804f7e48fc61325634822ed00c93cac6bd 100644 (file)
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/*     $Id: roff.c,v 1.248 2015/01/07 12:19:46 schwarze Exp $ */
+/*     $Id: roff.c,v 1.249 2015/01/14 22:58:16 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -2103,7 +2103,7 @@ roff_tr(ROFF_ARGS)
 static enum rofferr
 roff_so(ROFF_ARGS)
 {
-       char *name;
+       char *name, *cp;
 
        name = buf->buf + pos;
        mandoc_vmsg(MANDOCERR_SO, r->parse, ln, ppos, "so %s", name);
@@ -2118,7 +2118,12 @@ roff_so(ROFF_ARGS)
        if (*name == '/' || strstr(name, "../") || strstr(name, "/..")) {
                mandoc_vmsg(MANDOCERR_SO_PATH, r->parse, ln, ppos,
                    ".so %s", name);
-               return(ROFF_ERR);
+               buf->sz = mandoc_asprintf(&cp,
+                   ".sp\nSee the file %s.\n.sp", name) + 1;
+               free(buf->buf);
+               buf->buf = cp;
+               *offs = 0;
+               return(ROFF_REPARSE);
        }
 
        *offs = pos;