Bug 9951

Summary: неприятная бага в xmlrpc (который даже не собран)
Product: Sisyphus Reporter: Michael Shigorin <mike>
Component: phpAssignee: Alexey Gladkov <legion>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: lakostis, legion
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://grundik.livejournal.com/122501.html

Description Michael Shigorin 2006-09-03 01:43:59 MSD
(см. Url)

Запрашиваем через XMLRPC метод A(string), который должен вернуть этот string
(ну, на самом деле не так, но для простоты пусть будет так).

Если клиент работает под debian, то всё хорошо.
Если клиент работает под ALM, то в случае, если string - это русские букыв,
получаем ошибку "error decoding RPC. reference to invalid character". Если ASCII
- то всё нормально. Кодировка везде UTF-8.

Клиент написан на PHP. На debian PHP собран с xmlrpc из коробки. На ALM я
поддержку xmlrpc делал ручками как extention, потому что в Alt нету xmlrpc для
PHP (как и многих других вещей; впрочем, про приколы alt-овцев с php я уже писал
когда-то; кстати, у них опять репозиторий побился).


Начинаем исследовать баг. Смотрим запрос (тестовый запрос - A("'раз','два'")).
debian:
"'&#209;&#128;&#208;&#176;&#208;&#183;','&#208;&#180;&#208;&#178;&#208;&#176;'"
ALM: "'&#29;&#128;&#28;&#176;&#28;&#183;','&#28;&#180;&#28;&#178;&#28;&#176;'"

Заметили? В ALM как-будто нолики вырезали из первого байта.

Оказывается, это древний баг (http://bugs.php.net/bug.php?id=28597). Но! В
xmlrpc-epi фикса нет, в ALM нету xmlrpc вообще, patch из бага не открывается
(сервер, где он лежал, уже нету). Из debian вытащить исходники не получится, так
как там не отдельно xmlrpc-epi, а в самом бинарнике php.

Еле нашёл патч -
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/libxmlrpc/xml_element.c?r1=1.3.4.2&r2=1.3.4.3
(ещё бы, 2004 год). Естественно, он не наложился бы, потому что исходники
xmlrpc-epi другие, чем xmlrpc в php (а пересобирать весь php мне как-то не
охота). Благо что патч маленький, нашёл нужное место, да поправил руками.

Пересобрал. Работает.
Comment 1 Sir Raorn 2006-09-03 02:31:17 MSD
А что мешает Благородному Дону использовать %patch после cp -pr
%php_extsrcdir/%php_extension/* . ?

P.S. package mismatch?
Comment 2 Alexey Gladkov 2006-09-04 10:45:52 MSD
Миш, ты что-то собрал, ты в этом чём-то нашёл багу ... php тут причём ?
У нас есть модули, которые пакуются отдельно и содержат патчи (например php-dba).
Кроме того (вопрос в сторону), а ты не пробовал собирать этот модуль с системным
libxmlrpc-devel ? 

По поводу баги:  Resolve -> INVALID
Comment 3 Michael Shigorin 2006-09-04 12:36:23 MSD
Лёш, эт не я собирал.  См. url.  Я всего лишь решил закинуть на тот случай, если
тебе результат разборки Руслана будет полезен, поскольку сам бы долго чесал в
затылке при таких искажениях данных.
Comment 4 Alexey Gladkov 2006-09-04 12:53:11 MSD
(In reply to comment #3)
> Лёш, эт не я собирал.

Понял. Большое спасибо. Если вдруг у нас когда-нибудь появится php-xmlrpc, то
буду иметь это ввиду.