From 86b220841276fc3ddcdebf1eb4bf6543e9aa39b7 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Wed, 24 Mar 2021 09:10:41 +0200 Subject: Fixed regression in conman.org client torture test 21 Couple of problems: - "data:" links were not flagged as supported - "data:" links are not supposed to further decoded or encoded since they are processed internally in the client IssueID #217 --- src/gmdocument.c | 1 + src/gmutil.c | 16 ++++++++++++++++ src/ui/labelwidget.c | 1 + 3 files changed, 18 insertions(+) (limited to 'src') diff --git a/src/gmdocument.c b/src/gmdocument.c index 77f10c61..3cf00a4b 100644 --- a/src/gmdocument.c +++ b/src/gmdocument.c @@ -195,6 +195,7 @@ static iRangecc addLink_GmDocument_(iGmDocument *d, iRangecc line, iGmLinkId *li link->flags |= file_GmLinkFlag; } else if (equalCase_Rangecc(parts.scheme, "data")) { + link->flags |= data_GmLinkFlag; } else if (equalCase_Rangecc(parts.scheme, "about")) { link->flags |= about_GmLinkFlag; diff --git a/src/gmutil.c b/src/gmutil.c index 8dcffaa1..b7ddfa21 100644 --- a/src/gmutil.c +++ b/src/gmutil.c @@ -95,7 +95,14 @@ void stripDefaultUrlPort_String(iString *d) { } } +iBool isDataUrl_String(const iString *d) { + return startsWithCase_String(d, "data:"); +} + const iString *urlFragmentStripped_String(const iString *d) { + if (isDataUrl_String(d)) { + return d; + } /* Note: Could use `iUrl` here and leave out the fragment. */ const size_t fragPos = indexOf_String(d, '#'); if (fragPos != iInvalidPos) { @@ -227,6 +234,9 @@ void urlDecodePath_String(iString *d) { void urlEncodePath_String(iString *d) { iUrl url; init_Url(&url, d); + if (equalCase_Rangecc(url.scheme, "data")) { + return; + } if (isEmpty_Range(&url.path)) { return; } @@ -355,6 +365,9 @@ void punyEncodeDomain_Rangecc(iRangecc domain, iString *encoded_out) { void punyEncodeUrlHost_String(iString *absoluteUrl) { iUrl url; init_Url(&url, absoluteUrl); + if (equalCase_Rangecc(url.scheme, "data")) { + return; + } if (isEmpty_Range(&url.host)) { return; } @@ -391,6 +404,9 @@ void urlEncodeSpaces_String(iString *d) { } const iString *withSpacesEncoded_String(const iString *d) { + if (isDataUrl_String(d)) { + return d; + } iString *enc = copy_String(d); urlEncodeSpaces_String(enc); return collect_String(enc); diff --git a/src/ui/labelwidget.c b/src/ui/labelwidget.c index 8089445b..6e8208c4 100644 --- a/src/ui/labelwidget.c +++ b/src/ui/labelwidget.c @@ -305,6 +305,7 @@ static void draw_LabelWidget_(const iLabelWidget *d) { adjusted_Rect(bounds, init_I2(iconPad, 0), zero_I2()), d->alignVisual, fg, + "%s", cstr_String(&d->label)); } if (flags & chevron_WidgetFlag) { -- cgit v1.2.3