[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [xml] UTF8ToHtml entity handling problem
- From: Daniel Veillard <veillard redhat com>
- To: "R. Steven Rainwater" <srainwater ncc com>
- Cc: xml gnome org
- Subject: Re: [xml] UTF8ToHtml entity handling problem
- Date: Fri, 17 Nov 2006 17:40:29 -0500
On Fri, Nov 17, 2006 at 02:54:56PM -0600, R. Steven Rainwater wrote:
> In the process of doing maintenance on the mod_virgule (advogato.org)
> codebase, I've run across what I think is a minor bug in the libxml2
> function, UTF8ToHtml(). I've checked the bug database and didn't see any
> reports on this. I thought it would be a good idea to post some
> background on how I'm using UTF8ToHtml() before filing a bug report in
> case I'm misunderstanding the intention of this function.
>
> Mod_virgule accepts HTML form submissions encoded as UTF-8 data. This
> data often includes HTML markup as well as various international
> characters. The data must be must be processed by older mod_virgule code
> that can handle only ASCII, not UTF-8 data. So the raw UTF-8 data is
> passed through UTF8ToHtml() to convert it to ASCII HTML with entity
> encoding of non-ASCII characters.
>
> This works great when the input is English or most languages that use a
> Latin character set. But when valid HTML markup encoded as UTF-8
> contains more exotic characters, such as Han ideographs, it causes
> UTF8ToHtml() to fail, returning an error code of -2. This is unexpected
> since the input was valid UTF-8.
>
> I examined the code of the UTF8ToHtml() function and discovered that it
> fails with error -2 because the input contains UTF-8 characters for
> which libxml2 does not know a named entity value (e.g. "É").
> Since there are tens of thousdands of possible UTF-8 characters and
> libxml2 only knows names for a couple of hundred, this seems to suggest
> UTF8ToHtml() will fail most of the time if the input includes non-Latin
> character sets.
>
> By making a trivial change to the code in UTF8ToHtml(), I was able to
> correct this behavior. When a named entity value cannot be found in the
> internal libxml2 entity table, a numeric entity value (e.g. "兡")
> is used instead.
>
> Here's the original code where the problem lies:
>
> /*
> * Try to lookup a predefined HTML entity for it
> */
>
> ent = htmlEntityValueLookup(c);
> if (ent == NULL) {
> /* no chance for this in Ascii */
> *outlen = out - outstart;
> *inlen = processed - instart;
> return(-2);
> }
>
> And here's the same piece of my revised code that seems to have fixed
> the problem:
>
> /*
> * Try to lookup a predefined HTML entity for it
> */
>
> ent = htmlEntityValueLookup(c);
> if (ent == NULL) {
> snprintf(nbuf, sizeof(nbuf), "#%u", c);
> cp = nbuf;
> }
>
>
> I can file a bug report and attach a full patch for this if desired.
> Otherwise, maybe somebody can explain where I've gone wrong. Thanks!
No that sounds just right ! Using a character reference (technically
"兡" is not an entity reference :-) is the right thing to do there.
Patch would be gratefully accepted, I will just need to check effect on
libxml2 and libxslt regression tests.
Daniel
--
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard redhat com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]