From 6f0999cbc2d23a7efaa616b673cf37f51241db86 Mon Sep 17 00:00:00 2001 From: Fumitoshi UKAI Date: Thu, 22 Nov 2001 14:15:19 +0000 Subject: [w3m-dev 02503] From: aito@fw.ipsj.or.jp closes: Debian Bug#120540 --- ChangeLog | 6 ++++++ indep.c | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1aeca0a..31ad2f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-11-22 aito@fw.ipsj.or.jp + + * [w3m-dev 02503] + * indep.c (getescapechar): allow incomplete entity references in URL + closes: Debian Bug#120540 + 2001-11-22 Fumitoshi UKAI * [w3m-dev 02506] diff --git a/indep.c b/indep.c index 717d9b5..d359253 100644 --- a/indep.c +++ b/indep.c @@ -1,4 +1,4 @@ -/* $Id: indep.c,v 1.7 2001/11/22 13:30:02 ukai Exp $ */ +/* $Id: indep.c,v 1.8 2001/11/22 14:15:19 ukai Exp $ */ #include "fm.h" #include #include @@ -275,6 +275,7 @@ getescapechar(char **str) { int dummy = -1; char *p = *str, *q; + int strict_entity = TRUE; if (*p == '&') p++; @@ -319,8 +320,24 @@ getescapechar(char **str) for (p++; IS_ALNUM(*p); p++) ; q = allocStr(q, p - q); + if (strcasestr("lt gt amp quot nbsp",q) && + *p != '=') { + /* a character entity MUST be terminated with ";". However, + there's MANY web pages which uses < , > or something + like them as <, >, etc. Therefore, we treat the most + popular character entities (including &#xxxx;) without + the last ";" as character entities. If the trailing character + is "=", it must be a part of query in an URL. So <=, >=, etc. + are not regarded as character entities. + */ + strict_entity = FALSE; + } if (*p == ';') p++; + else if (strict_entity) { + *str = p; + return -1; + } *str = p; return getHash_si(&entity, q, -1); } -- cgit v1.2.3