From: schwarze@mdocml.bsd.lv
To: source@mdocml.bsd.lv
Subject: mdocml: This file contains too much complexity.
Date: Sat, 1 Jun 2013 18:57:35 -0400 (EDT) [thread overview]
Message-ID: <201306012257.r51MvZVX030893@krisdoz.my.domain> (raw)
Log Message:
-----------
This file contains too much complexity.
Remove one layer of indirection by deleting mparse_readfd_r()
and doing its work in the public mparse_readfd().
As a bonus, catch recursive .so.
This is part of the preparations to resync to openbsd.org.
Modified Files:
--------------
mdocml:
read.c
Revision Data
-------------
Index: read.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/read.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -Lread.c -Lread.c -u -p -r1.35 -r1.36
--- read.c
+++ read.c
@@ -71,7 +71,6 @@ struct mparse {
static void resize_buf(struct buf *, size_t);
static void mparse_buf_r(struct mparse *, struct buf, int);
-static void mparse_readfd_r(struct mparse *, int, const char *, int);
static void pset(const char *, int, struct mparse *);
static int read_whole_file(const char *, int, struct buf *, int *);
static void mparse_end(struct mparse *);
@@ -490,7 +489,7 @@ rerun:
*/
if (curp->secondary)
curp->secondary->sz -= pos + 1;
- mparse_readfd_r(curp, -1, ln.buf + of, 1);
+ mparse_readfd(curp, -1, ln.buf + of);
if (MANDOCLEVEL_FATAL <= curp->file_status)
break;
pos = 0;
@@ -664,19 +663,25 @@ mparse_end(struct mparse *curp)
}
static void
-mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file,
- int re)
+mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file)
{
const char *svfile;
+ static int recursion_depth;
+
+ if (64 < recursion_depth) {
+ mandoc_msg(MANDOCERR_ROFFLOOP, curp, curp->line, 0, NULL);
+ return;
+ }
/* Line number is per-file. */
svfile = curp->file;
curp->file = file;
curp->line = 1;
+ recursion_depth++;
mparse_buf_r(curp, blk, 1);
- if (0 == re && MANDOCLEVEL_FATAL > curp->file_status)
+ if (0 == --recursion_depth && MANDOCLEVEL_FATAL > curp->file_status)
mparse_end(curp);
curp->file = svfile;
@@ -691,12 +696,12 @@ mparse_readmem(struct mparse *curp, cons
blk.buf = UNCONST(buf);
blk.sz = len;
- mparse_parse_buffer(curp, blk, file, 0);
+ mparse_parse_buffer(curp, blk, file);
return(curp->file_status);
}
-static void
-mparse_readfd_r(struct mparse *curp, int fd, const char *file, int re)
+enum mandoclevel
+mparse_readfd(struct mparse *curp, int fd, const char *file)
{
struct buf blk;
int with_mmap;
@@ -705,7 +710,7 @@ mparse_readfd_r(struct mparse *curp, int
if (-1 == (fd = open(file, O_RDONLY, 0))) {
perror(file);
curp->file_status = MANDOCLEVEL_SYSERR;
- return;
+ goto out;
}
/*
* Run for each opened file; may be called more than once for
@@ -716,10 +721,10 @@ mparse_readfd_r(struct mparse *curp, int
if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {
curp->file_status = MANDOCLEVEL_SYSERR;
- return;
+ goto out;
}
- mparse_parse_buffer(curp, blk, file, re);
+ mparse_parse_buffer(curp, blk, file);
#ifdef HAVE_MMAP
if (with_mmap)
@@ -730,13 +735,7 @@ mparse_readfd_r(struct mparse *curp, int
if (STDIN_FILENO != fd && -1 == close(fd))
perror(file);
-}
-
-enum mandoclevel
-mparse_readfd(struct mparse *curp, int fd, const char *file)
-{
-
- mparse_readfd_r(curp, fd, file, 0);
+out:
return(curp->file_status);
}
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
reply other threads:[~2013-06-01 22:57 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201306012257.r51MvZVX030893@krisdoz.my.domain \
--to=schwarze@mdocml.bsd.lv \
--cc=source@mdocml.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).