aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2010-12-27 21:41:05 +0000
committerIngo Schwarze <schwarze@openbsd.org>2010-12-27 21:41:05 +0000
commita629f7c1e6958d7f3fd35692d5c0df8697a743a0 (patch)
tree05f15c0e3788ac700e5257156232a362be09edb4 /html.c
parentf32c1c5d9597e6067c2a647a03ebb0eb8992b428 (diff)
downloadmandoc-a629f7c1e6958d7f3fd35692d5c0df8697a743a0.tar.gz
mandoc-a629f7c1e6958d7f3fd35692d5c0df8697a743a0.tar.zst
mandoc-a629f7c1e6958d7f3fd35692d5c0df8697a743a0.zip
In case an ID attribute is written in pieces, only protect the first
piece with a prepended 'x', not each piece, such that quoted and unquoted .Sh, .Ss, and .Sx arguments are compatible with each other. Fixing a bug reported by Nicolas Joly <njoly at NetBSD dot org>, avoiding a regression in my first patch as pointed out by njoly as well. "feel free to do so" kristaps@
Diffstat (limited to 'html.c')
-rw-r--r--html.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/html.c b/html.c
index ac05a6fc..70403ff7 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.123 2010/12/24 14:14:00 kristaps Exp $ */
+/* $Id: html.c,v 1.124 2010/12/27 21:41:05 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -771,20 +771,24 @@ html_idcat(char *dst, const char *src, int sz)
{
int ssz;
- assert(sz);
+ assert(sz > 2);
/* Cf. <http://www.w3.org/TR/html4/types.html#h-6.2>. */
- for ( ; *dst != '\0' && sz; dst++, sz--)
- /* Jump to end. */ ;
-
- assert(sz > 2);
-
/* We can't start with a number (bah). */
- *dst++ = 'x';
- *dst = '\0';
- sz--;
+ if ('#' == *dst) {
+ dst++;
+ sz--;
+ }
+ if ('\0' == *dst) {
+ *dst++ = 'x';
+ *dst = '\0';
+ sz--;
+ }
+
+ for ( ; *dst != '\0' && sz; dst++, sz--)
+ /* Jump to end. */ ;
for ( ; *src != '\0' && sz > 1; src++) {
ssz = snprintf(dst, (size_t)sz, "%.2x", *src);