QT5 XML. UTF-8 BOM. Ошибка парсинга.

Сообщения
6
#1
Здравствуйте. Возникла интересная ситуация. Из разряда не что делать, а почему вообще так.

Проблема в следующем:

1. Есть Astra Linux SE 1.7.0.
2. Есть Astra Linux SE 1.7.2. Версия получена путем обновления с 1.7.0. https://wiki.astralinux.ru/pages/viewpage.action?pageId=211652159

Пакеты:

1. Astra Linux SE 1.7.0:
Код:
user@astra:~$ dpkg -l | grep libqt5xml
ii  libqt5xml5:amd64                              5.15.2+dfsg-0astra4                                amd64        Qt 5 XML module
ii  libqt5xmlpatterns5:amd64                      5.15.2-0astra1                                     amd64        Qt 5 XML patterns module
ii  libqt5xmlpatterns5-dev:amd64                  5.15.2-0astra1                                     amd64        Qt 5 XML patterns development files
2. Astra Linux SE 1.7.2
Код:
user@astra:~$ dpkg -l | grep libqt5xml
ii  libqt5xml5:amd64                              5.15.2+dfsg-0astra27                                 amd64        Qt 5 XML module
ii  libqt5xmlpatterns5:amd64                      5.15.2-0astra1                                       amd64        Qt 5 XML patterns module
ii  libqt5xmlpatterns5-dev:amd64                  5.15.2-0astra1                                       amd64        Qt 5 XML patterns development files

Есть xml файл в UTF-8:
Код:
<?xml version="1.0" encoding="utf-8"?>
<a>
  <b>c</b>
</a>
Есть упрощенный код:
Код:
bool OLoader::loadXml(const QString &filename, QDomDocument &dom)
{
    ...
    QString err;
    int line;
    int col;
    if (!dom.setContent(QByteArray::fromRawData(buffer, int(size)), false, &err, &line, &col)) {
      return false;
    }
    ...
    return true;
}
На разных версиях Astra Linux этот код работает по-разному. Для версии 1.7.0 отрабатывает как ожидается: файл парсится. В версии 1.7.2 ошибка парсинга: error occurred while parsing element.
В ходе экспериментов с исходным xml файлом пришел к выводу, что проблема в трехбайтовой последовательности BOM, которая изначально присутствовала в файле. Без нее на 1.7.2 файл начинает парсится.
Я пробовал разные XML файлы и все сходилось к одному. Если в xml файле отсутствует последовательность BOM, то парсится и на 1.7.0 и на 1.7.2. Если в xml файле присутствует последовательность BOM, то парсится только на 1.7.0.

В связи с этим мне очень стало интересно, почему есть такая разница в поведении на разных версиях ОС? Очевидно, что дело может быть и не в ОС, просто если смотреть на ситуацию упрощенно и очень сверху, то просто был факт обновление ОС с 1.7.0 до 1.7.2. В какую сторону можно копнуть в поисках причин различного поведения?

В версии 1.6.x я с такой проблемой не сталкивался. Да и upstream версии QT XML остались прежними.
 
Сообщения
6
#4
Пробежался по changelog пакета libqt5xml5.
1. Не увидел (или не углядел) в ревизиях до astra4 каких то патчей, которые могли поправить QTBUG-14395.
2. Не увидел (или не углядел) в ревизиях с astra4 по astra27 никаких правок, которые могли бы потенциально сбросить патчи xml ревизий до astra4, если предположить, что они были.
 

Карл

New member
Сообщения
507
#7
или они не внесли это в свой changelog или както это зависит от внешних данных (переменных окружения)
тут надо изучать код qt и думать

кстати - а как можно получить исходные коды этих библиотек qt ?
ведь если не дают - нарушают gpl )
 
Сообщения
6
#8
или они не внесли это в свой changelog или както это зависит от внешних данных (переменных окружения)
тут надо изучать код qt и думать

кстати - а как можно получить исходные коды этих библиотек qt ?
ведь если не дают - нарушают gpl )
Сам QT в открытом доступе.
https://github.com/qt/qtbase
Но это апстрим.

Для ревизии +dfsg могут быть патчи мантейнеров дебиана, их исходные коды есть на сайте дебиана.
А для ревизии 0astra27 есть патчи мантейнеров астры, но как найти их исходные коды я не знаю.
 

Карл

New member
Сообщения
507
#9
наверно тут интересный изменения 0astra27 и 0astra4
если же они не могут так менять работу, то уж думать далее, писать тесты, может strace задействовать ...