aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_macro.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-05-07 05:39:35 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-05-07 05:39:35 +0000
commitc84041950efb12923d54288506fed99713a398fa (patch)
tree3faf51c72e6e4855574405f9045b6ebef815e020 /mdoc_macro.c
parent67174f9ce5c119d2ab17f3be66110e3e1bd079c3 (diff)
downloadmandoc-c84041950efb12923d54288506fed99713a398fa.tar.gz
mandoc-c84041950efb12923d54288506fed99713a398fa.tar.zst
mandoc-c84041950efb12923d54288506fed99713a398fa.zip
Protection against running lookup() against quoted words.
Diffstat (limited to 'mdoc_macro.c')
-rw-r--r--mdoc_macro.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 525a0a62..d0b53683 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -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;