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.