]> git.cameronkatri.com Git - mandoc.git/commitdiff
Protection against running lookup() against quoted words.
authorKristaps Dzonsons <kristaps@bsd.lv>
Fri, 7 May 2010 05:39:35 +0000 (05:39 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Fri, 7 May 2010 05:39:35 +0000 (05:39 +0000)
Makefile
mdoc_macro.c

index 1e188fb0bd5443103e79af926b1b040e559f5233..b67d3123b2deffd7954e77a6c1e322a0c7aa8d72 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,9 +5,10 @@ INCLUDEDIR     = $(PREFIX)/include
 LIBDIR         = $(PREFIX)/lib
 MANDIR         = $(PREFIX)/man
 EXAMPLEDIR     = $(PREFIX)/share/examples/mandoc
-INSTALL_PROGRAM        = install -m 0755
-INSTALL_DATA   = install -m 0444
-INSTALL_LIB    = install -m 0644
+INSTALL                ?= install
+INSTALL_PROGRAM        = $(INSTALL) -m 0755
+INSTALL_DATA   = $(INSTALL) -m 0444
+INSTALL_LIB    = $(INSTALL) -m 0644
 INSTALL_MAN    = $(INSTALL_DATA)
 
 VERSION           = 1.9.23
@@ -84,10 +85,10 @@ MANS           = mandoc.1 mdoc.3 mdoc.7 manuals.7 mandoc_char.7 \
 BINS      = mandoc
 TESTS     = test-strlcat.c test-strlcpy.c
 CONFIGS           = config.h.pre config.h.post
-CLEAN     = $(BINS) $(LNS) $(LLNS) $(LIBS) $(OBJS) $(HTMLS) \
+DOCLEAN           = $(BINS) $(LNS) $(LLNS) $(LIBS) $(OBJS) $(HTMLS) \
             $(TARGZS) tags $(MD5S) $(XMLS) $(TEXTS) $(GSGMLS) \
             $(GHTMLS) config.h config.log
-INSTALL           = $(SRCS) $(HEADS) Makefile $(MANS) $(SGMLS) $(STATICS) \
+DOINSTALL  = $(SRCS) $(HEADS) Makefile $(MANS) $(SGMLS) $(STATICS) \
             $(DATAS) $(XSLS) $(EXAMPLES) $(TESTS) $(CONFIGS)
 
 all:   $(BINS)
@@ -95,7 +96,7 @@ all:  $(BINS)
 lint:  $(LLNS)
 
 clean:
-       rm -f $(CLEAN)
+       rm -f $(DOCLEAN)
 
 cleanlint:
        rm -f $(LNS) $(LLNS)
@@ -110,11 +111,11 @@ www:      all $(GSGMLS) $(GHTMLS) $(HTMLS) $(TEXTS) $(MD5S) $(TARGZS)
 htmls: all $(GSGMLS) $(GHTMLS)
 
 installwww: www
-       install -m 0444 $(GHTMLS) $(HTMLS) $(TEXTS) $(STATICS) $(PREFIX)/
-       install -m 0444 mdocml-$(VERSION).tar.gz $(PREFIX)/snapshots/
-       install -m 0444 mdocml-$(VERSION).md5 $(PREFIX)/snapshots/
-       install -m 0444 mdocml-$(VERSION).tar.gz $(PREFIX)/snapshots/mdocml.tar.gz
-       install -m 0444 mdocml-$(VERSION).md5 $(PREFIX)/snapshots/mdocml.md5
+       $(INSTALL_DATA) $(GHTMLS) $(HTMLS) $(TEXTS) $(STATICS) $(PREFIX)/
+       $(INSTALL_DATA) mdocml-$(VERSION).tar.gz $(PREFIX)/snapshots/
+       $(INSTALL_DATA) mdocml-$(VERSION).md5 $(PREFIX)/snapshots/
+       $(INSTALL_DATA) mdocml-$(VERSION).tar.gz $(PREFIX)/snapshots/mdocml.tar.gz
+       $(INSTALL_DATA) mdocml-$(VERSION).md5 $(PREFIX)/snapshots/mdocml.md5
 
 install:
        mkdir -p $(BINDIR)
@@ -205,9 +206,9 @@ ChangeLog.txt:
 ChangeLog.html: ChangeLog.xml ChangeLog.xsl
        xsltproc -o $@ ChangeLog.xsl ChangeLog.xml
 
-mdocml-$(VERSION).tar.gz: $(INSTALL)
+mdocml-$(VERSION).tar.gz: $(DOINSTALL)
        mkdir -p .dist/mdocml/mdocml-$(VERSION)/
-       cp -f $(INSTALL) .dist/mdocml/mdocml-$(VERSION)/
+       cp -f $(DOINSTALL) .dist/mdocml/mdocml-$(VERSION)/
        ( cd .dist/mdocml/ && tar zcf ../../$@ mdocml-$(VERSION)/ )
        rm -rf .dist/
 
index 525a0a62ffc607187e541f325cfe4f6a0ffcace1..d0b5368305a20e1a801602488ab3402579af0f0f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_macro.c,v 1.53 2010/05/07 05:34:56 kristaps Exp $ */
+/*     $Id: mdoc_macro.c,v 1.54 2010/05/07 05:39:35 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -702,19 +702,22 @@ blk_exp_close(MACRO_PROT_ARGS)
                if (ARGS_EOLN == ac)
                        break;
 
-               if (MDOC_MAX != (ntok = lookup(tok, p))) {
-                       if ( ! flushed) {
-                               if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
-                                       return(0);
-                               flushed = 1;
-                       }
-                       if ( ! mdoc_macro(m, ntok, line, lastarg, pos, buf))
+               ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
+
+               if (MDOC_MAX == ntok) {
+                       if ( ! mdoc_word_alloc(m, line, lastarg, p))
                                return(0);
-                       break;
-               } 
+                       continue;
+               }
 
-               if ( ! mdoc_word_alloc(m, line, lastarg, p))
+               if ( ! flushed) {
+                       if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
+                               return(0);
+                       flushed = 1;
+               }
+               if ( ! mdoc_macro(m, ntok, line, lastarg, pos, buf))
                        return(0);
+               break;
        }
 
        if ( ! flushed && ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
@@ -787,8 +790,6 @@ in_line(MACRO_PROT_ARGS)
                if (ARGS_PUNCT == ac)
                        break;
 
-               /* Quoted words shouldn't be looked-up. */
-
                ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
 
                /* 
@@ -985,7 +986,9 @@ blk_full(MACRO_PROT_ARGS)
                        continue;
                }
 
-               if (MDOC_MAX == (ntok = lookup(tok, p))) {
+               ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
+
+               if (MDOC_MAX == ntok) {
                        if ( ! mdoc_word_alloc(m, line, la, p))
                                return(0);
                        continue;
@@ -1101,7 +1104,9 @@ blk_part_imp(MACRO_PROT_ARGS)
                        body = m->last;
                }
 
-               if (MDOC_MAX == (ntok = lookup(tok, p))) {
+               ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
+
+               if (MDOC_MAX == ntok) {
                        if ( ! mdoc_word_alloc(m, line, la, p))
                                return(0);
                        continue;
@@ -1223,7 +1228,9 @@ blk_part_exp(MACRO_PROT_ARGS)
 
                assert(NULL != head && NULL != body);
 
-               if (MDOC_MAX == (ntok = lookup(tok, p))) {
+               ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
+
+               if (MDOC_MAX == ntok) {
                        if ( ! mdoc_word_alloc(m, line, la, p))
                                return(0);
                        continue;
@@ -1339,7 +1346,9 @@ in_line_argn(MACRO_PROT_ARGS)
                        flushed = 1;
                }
 
-               if (MDOC_MAX != (ntok = lookup(tok, p))) {
+               ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
+
+               if (MDOC_MAX != ntok) {
                        if ( ! flushed && ! rew_elem(m, tok))
                                return(0);
                        flushed = 1;