aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tbl_data.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2021-05-18 13:22:43 +0000
committerIngo Schwarze <schwarze@openbsd.org>2021-05-18 13:22:43 +0000
commitaad48758804c7d768433a0f6669d73e6cc0d77b8 (patch)
tree2acb3b24e81d859830d5bc001d21a068a89ac6a7 /tbl_data.c
parentd6266f53ec7f1dc3346b03dc9d37493645b4f5d4 (diff)
downloadmandoc-aad48758804c7d768433a0f6669d73e6cc0d77b8.tar.gz
mandoc-aad48758804c7d768433a0f6669d73e6cc0d77b8.tar.zst
mandoc-aad48758804c7d768433a0f6669d73e6cc0d77b8.zip
When looking for column separators on tbl(7) data lines, properly skip
escape sequences; do not misinterpret bytes from the middle of escape sequence names or arguments as column separators. Bug reported and patch tested by Oliver dot Corff at email dot de.
Diffstat (limited to 'tbl_data.c')
-rw-r--r--tbl_data.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/tbl_data.c b/tbl_data.c
index 4f921961..cfc489bb 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -1,7 +1,7 @@
-/* $Id: tbl_data.c,v 1.54 2021/05/15 17:19:04 schwarze Exp $ */
+/* $Id: tbl_data.c,v 1.55 2021/05/18 13:22:43 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011,2015,2017,2018,2019 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011,2015,2017-2019,2021 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -46,6 +46,7 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
struct tbl_dat *dat, *pdat;
struct tbl_cell *cp;
struct tbl_span *pdp;
+ const char *ccp;
int sv;
/*
@@ -54,8 +55,11 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
*/
sv = *pos;
- while (p[*pos] != '\0' && p[*pos] != tbl->opts.tab)
- (*pos)++;
+ ccp = p + sv;
+ while (*ccp != '\0' && *ccp != tbl->opts.tab)
+ if (*ccp++ == '\\')
+ mandoc_escape(&ccp, NULL, NULL);
+ *pos = ccp - p;
/* Advance to the next layout cell, skipping spanners. */