Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • L libxml2
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 91
    • Issues 91
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 6
    • Merge requests 6
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GNOMEGNOME
  • libxml2
  • Issues
  • #542
Closed
Open
Issue created May 18, 2023 by Niels Dossche@nielsdos

UTF-8 validation regression in 2.11.0 in parser

We've received a bug report on php-src from a user who has trouble parsing an XML document. It used to parse properly in 2.10.4, but it fails in 2.11.0. I created a small C reproducer to demonstrate the issue:

#include <stdio.h>
#include <libxml/xmlreader.h>

int main(int argc, char* argv[]) {
	(void) argc;
	(void) argv;

    int ret;

    xmlTextReaderPtr reader = xmlReaderForFile("xml.xml", NULL, 0);
    if (!reader) {
        printf("Failed to open XML document.\n");
        return 1;
    }

    while ((ret = xmlTextReaderRead(reader)) == 1) {
        int type = xmlTextReaderNodeType(reader);

        if (type == XML_ELEMENT_NODE) {
            const xmlChar *name = xmlTextReaderConstName(reader);
            printf("Node name: %s\n", name);

            if (xmlTextReaderHasValue(reader)) {
                const xmlChar *value = xmlTextReaderConstValue(reader);
                printf("Node value: %s\n", value);
            }
        }
    }

    xmlTextReaderClose(reader);
    xmlFreeTextReader(reader);

    return 0;
}

Save the following file as xml.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog
SYSTEM "shops.dtd">
<yml_catalog date="2023-05-17 08:00">
	<shop>
		<name>SOME NAME</name>
		<company>SOME COMPANY</company>
		<url>https://some.site</url>
		<currencies>
			<currency id="FFF" rate="1"/>
		</currencies>
		<categories>
			<category id="3" parentId="0">Банкетки, пуфы</category>
		</categories>
		<offers>
			<offer>
				<description>ИЗЫСКАННЫЙ АНГЛИЙСКИЙ СТИЛЬ. Именно его предпочитали известные монархи прошлого: королевы Анна и Виктория, короли Георг I, Георг II. Роскошь, великолепие орнаментов и деталей, благородные натуральные оттенки и материалы, подлинная королевская элегантность эта мебель для людей с прекрасным вкусом и аристократическим характером. УНИКАЛЬНОСТЬ МЕБЕЛИ ТАУЭР. Мы тщательно и вдохновлённо работали над внешним видом прихожей Тауэр, чтобы передать эстетику роскошных, уютных и практичных английских домов. Фурнитура выполнена из испанской латуни, отделка из высококачественной эко-кожи. Шарм придают изысканные каннелюры из массива бука. Тауэр великолепное произведение искусства, соединение кропотливого труда искусных мастеров и уточнённой фантазии дизайнера. ТЕХНИКА ОБИВКИ CAPITONE. Техника была создана ещё в середине восемнадцатого века во времена правления императора Наполеона III. Она сразу же стала олицетворением богатства, шика и роскоши. В России ее называли каретной стяжкой из-за того, что таким способом часто украшали внутреннее убранство карет. КОМФОРТ И ПРЕЗЕНТАБЕЛЬНОСТЬ. Прихожая Тауэр сочетает в себе благородство королевских дворцов и современное удобство. Она послужит идеальным местом для отдыха, хранения предметов Вашего гардероба и станет любимой деталью интерьера. Гарантируем она очарует вас антуражем английской классики. КУПИТЕ ПРИХОЖУЮ ТАУЭР С ДОСТАВКОЙ НА ОФИЦИАЛЬНОМ САЙТЕ BOGACHO ПРЯМО СЕЙЧАС. . *Габаритные размеры моделей могут отличаться от заявленных в пределах 2 см</description>
				<barcode>333333</barcode>
				<param name="net_weight" unit="kg">57</param>
				<param name="net_width" unit="cm">110</param>
				<param name="net_height" unit="cm">200</param>
				<param name="net_deep" unit="cm">20</param>
				<param name="gross_weight" unit="kg">41</param>
				<param name="gross_width" unit="cm">210</param>
				<param name="gross_width_2" unit="cm">0</param>
				<param name="gross_height" unit="cm">123</param>
				<param name="gross_height_2" unit="cm">0</param>
				<param name="gross_deep" unit="cm">26</param>
				<param name="gross_deep_2" unit="cm">0</param>
			</offer>
		</offers>
	</shop>
</yml_catalog>

On 2.10.4 the output shows no UTF-8 error, but on 2.11.0 it shows:

xml.xml:17: parser error : PCDATA invalid Char value 208
ным вкусом и аристократическим характером. 
                                                                               ^
xml.xml:17: parser error : Input is not proper UTF-8, indicate encoding !
ным вкусом и аристократическим характером. 
                                                                               ^

I believe the document is valid UTF-8, so this looks like a regression to me. Thanks in advance.

Assignee
Assign to
Time tracking