diff options
author | 2021-05-18 13:22:43 +0000 | |
---|---|---|
committer | 2021-05-18 13:22:43 +0000 | |
commit | aad48758804c7d768433a0f6669d73e6cc0d77b8 (patch) | |
tree | 2acb3b24e81d859830d5bc001d21a068a89ac6a7 /tbl_data.c | |
parent | d6266f53ec7f1dc3346b03dc9d37493645b4f5d4 (diff) | |
download | mandoc-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.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -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. */ |