From 7d0d8a853a01004572d27e47b5c1146361816271 Mon Sep 17 00:00:00 2001 From: Geoff McLane Date: Mon, 1 Feb 2016 20:07:55 +0100 Subject: [PATCH] Issue #345 - discard leading spaces in href --- src/attrs.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/attrs.c b/src/attrs.c index d806ca5..4237f9b 100644 --- a/src/attrs.c +++ b/src/attrs.c @@ -1497,18 +1497,34 @@ void TY_(CheckUrl)( TidyDocImpl* doc, Node *node, AttVal *attval) else if ((c > 0x7e) || (c <= 0x20) || (strchr("<>", c))) ++escape_count; } - + if ( cfgBool(doc, TidyFixUri) && escape_count ) { + Bool hadnonspace = no; len = TY_(tmbstrlen)(p) + escape_count * 2 + 1; dest = (tmbstr) TidyDocAlloc(doc, len); - + for (i = 0; 0 != (c = p[i]); ++i) { if ((c > 0x7e) || (c <= 0x20) || (strchr("<>", c))) - pos += sprintf( dest + pos, "%%%02X", (byte)c ); + { + if (c == 0x20) + { + /* #345 - special case for leading spaces - discard */ + if (hadnonspace) + pos += sprintf( dest + pos, "%%%02X", (byte)c ); + } + else + { + pos += sprintf( dest + pos, "%%%02X", (byte)c ); + hadnonspace = yes; + } + } else + { + hadnonspace = yes; dest[pos++] = c; + } } dest[pos] = 0;