HTTP из PHP плагина на r24 и r25¶
Редакция 2026-11-03. HTTP-запросы из PHP плагина на r24 и r25: cURL и
curl_multi, потоки, CA-бандл, локальные URL, подмена хостовlcreg,wget. Перенесено без переписывания из guide/php-environment.md §3.6–§3.7; источники и оговорки — во вступлении той же главы, остальное о среде PHP — там же. Дополнение (2026-11-03): проверка на устройстве (tv188b261021_0117_r25,php_serverтестового плагинаtest_plugin13, каждый случай — один прогон) — порт и хост уcurl_setopt(CURLOPT_URL)иcurl_init(url)к127.0.0.1/localhost, падениеcurl_multi_getcontentи обход черезCURLOPT_FILE(§3.6).
Коротко: вопрос → ответ¶
| Вопрос | Ответ | Где |
|---|---|---|
| Какой cURL? | r25: 7.67.0 с OpenSSL 1.0.1u (устройство r25)1; части констант нет (устройство r25)2 | §3.6; константы — php-environment.md §4.2 |
| Какой CA-бандл? | /firmware/certs/ca-bundle.crt (устройство r25)3 данных Mozilla 2022 года (код r22, r24, r25)4 |
§3.6 |
Есть ли wget? |
r25: $FS_PREFIX/bin/wget, ссылка на BusyBox (устройство r25)5; в одном прогоне вызов по имени к /ping — ok и rc=0 (устройство r25)6, полным путём — rc=126 (устройство r25)7 |
§3.6 |
Почему curl_multi роняет php_server? |
tv188b r25, один прогон: SIGSEGV в zif_curl_multi_getcontent (устройство r25)8, затем PHP_CALL_FAILED (устройство r25)9; с CURLOPT_FILE без curl_multi_getcontent шаг прошёл (устройство r25)10 |
§3.6 |
Подставляет ли PHP порт в http://127.0.0.1/cgi-bin/plugins/…? |
tv188b r25, один прогон: curl_setopt(CURLOPT_URL) — да, :80 (устройство r25)11; curl_init(url) — нет (устройство r25)12; CGI порт не видит (устройство r25)13 |
§3.6 |
Задачи¶
3.6. HTTP из PHP: cURL, потоки, CA-бандл, локальные URL, wget¶
Версии. На r25 curl_version() даёт 7.67.0, OpenSSL/1.0.1u, zlib 1.2.11, arm-unknown-linux-androideabi
(устройство r25)1; строка libcurl/7.67.0 есть в библиотеках tv188b r22, r24, r25 и tv175u r24
(код r22, r24, r25)14. Наборы имён curl_multi_* и CURLOPT_* в libphp5.so совпадают у всех пяти сборок
(код r22, r24, r25)15. Каких констант нет — php-environment.md §4.2.
Хелпер прошивки. HD::http_get_document r24 по умолчанию отключает проверку TLS, следует редиректам, ставит
CURLOPT_ENCODING=1 и тайм-ауты из $DEFAULT_CURL_*, а опции вызывающего применяет поверх
(код r24)16. Любой код, кроме 200, и ошибка curl дают DuneCurlException
(код r24)17; URL и POST-поля идут в лог, пока не передан $silent=true
(код r24)18, а в r25 сообщения лога изменены (код r25)19. В tv188b r22
файла dunelib/utils.php нет (код r22, r24)20. Проверка TLS в хелпере —
BUG-003, свои копии хелпера в плагинах —
§9.1.
CA-бандл. Файл /firmware/certs/ca-bundle.crt одинаков в пяти сборках (код r22, r24, r25)21 и доступен
из обоих видов PHP на r25 (устройство r25)3. В r24 его подставляет HD::http_get_document при
CURLOPT_SSL_VERIFYPEER=true для https (код r24)22. Что он значит для реальных сайтов
(прогон на 19 хостах, errno 60 у www.ssl.com, errno 35 у kodikapi.com), — в
BUG-001.
curl_multi. На r25 curl_multi на 4 хендла к httpd самого плеера доходит до curl_multi_info_read со всеми
сообщениями, а затем php-cgi падает с кодом 139 (устройство r25)23, а в php_server операция заканчивается
PHP_CALL_FAILED (устройство r25)24 и диалогом «Ошибка приложения» (устройство r25)25. Запись —
BUG-002.
В прогоне на tv188b r25 curl_multi на четырёх HTTP-хендлах к компьютеру записал четыре info_read msg=1 result=0 и строку после curl_multi_info_read
(устройство r25)26. Шаг не записал end за 25 с: отчёт обрывается после curl_multi_info_read, без h0 и curl_multi_close прошёл, а заголовок
сбора уже показывает php_server(test_plugin11)=нет (устройство r25)27.
Повтор при проверке на устройстве (tv188b r25, чистый php_server, метки до и после каждого вызова, один прогон) сдвинул место обрыва
(устройство r25)28. После
curl_multi_exec(run=0) пять вызовов curl_multi_info_read вернули четыре пары msg=1/result=0, затем false
(устройство r25)29. curl_getinfo(h0, CURLINFO_HTTP_CODE) вернул 200, а последняя строка
отчёта — «перед curl_multi_getcontent h0», без метки после этого вызова (устройство r25)30.
Оболочка получила EOF от PHP-сервера, записала PHP_CALL_FAILED и stopped; end multi за 25 с не появился
(устройство r25)31. HTTP-сервер компьютера при этом зарегистрировал все четыре
GET /ping?multi=0..3 и ответил на каждый статусом 200 (устройство r25)32. Причина обрыва
этими прогонами не установлена; гипотеза по коду и другие цели — §7.
Проверка на устройстве (tv188b r25, php_server, по одному прогону каждого варианта) снял сам сбой. С CURLOPT_RETURNTRANSFER после
curl_multi_info_read (четыре msg=1 result=0) последняя метка — «перед curl_multi_getcontent h0», и php_server упал с SIGSEGV
(SEGV_MAPERR, fault addr 0x70747490); кадр #00 — libphp5.so zif_curl_multi_getcontent+116 (pc 0010e5d0), tombstone записан
(устройство r25)8. Оболочка получила EOF от PHP-сервера, записала «op 5 failed», PHP_CALL_FAILED и
«[handle_user_input] Failed.», а php_server тестового плагина после шага не было (устройство r25)9. Тот же
curl_multi на четырёх хендлах, но с CURLOPT_FILE и без curl_multi_getcontent, прошёл до конца: curl_getinfo вернул 200 у каждого
хендла, файлы multi_0..3.out — по 3 байта, метка «после curl_multi_close» записана, php_server после шага жив, в logcat -b crash
записей нет (устройство r25)10. Практически: тело ответа curl_multi на r25 пишите в файл через
CURLOPT_FILE и не вызывайте curl_multi_getcontent — в этом прогоне так сбоя не было
(устройство r25)33. Что именно читает функция в
точке падения, — гипотезы в §7.
Локальные URL. На tv188b r25 HD_HTTP_LOCAL_PORT = 80 в php_server (устройство r25)34, порт 80 слушает httpd
(устройство r25)35; в APK r24 по коду — 11080 (код r24)36. Поэтому URL своего CGI лучше
брать из plugin_cgi_url: это шаблон с портом (код r24) (код r24)37, на r25 с явным :80 (устройство r25)38. Запросы изнутри плеера к http://127.0.0.1/… и http://127.0.0.1:80/…
работают (устройство r25)39.
В URL-ветви curl_setopt строка идёт через HTTP-помощник: r25 (код r25)40, r24
(код r24)41. По коду r24 он при заданной HD_HTTP_LOCAL_PORT заменяет
http://127.0.0.1/cgi-bin/plugins/ и http://localhost/cgi-bin/plugins/ на http://127.0.0.1:<порт>/cgi-bin/plugins/
(код r24)42. В r25 _php_do_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет префикс
http://localhost/cgi-bin/plugins/ на http://127.0.0.1:<HD_HTTP_LOCAL_PORT>/cgi-bin/plugins/, сохраняя хвост URL
(код r25)43, и тем же кодом — префикс без порта http://127.0.0.1/cgi-bin/plugins/
(код r25)44. Без HD_HTTP_LOCAL_PORT, а также для http://-URL с другим хостом или путём
порт не подставляется и URL уходит в _php_apply_lcreg_to_http (§3.7); URL не на http:// возвращается без обработки
(код r25)45. URL, переданный прямо в curl_init, этот помощник на r25 минует: у этих двух
точек входа разные маршруты обработки URL (код r25)46.
HTTP_HOST зависит от способа задать URL (tv188b r25, php_server). При проверке на устройстве (один прогон)
curl_setopt(CURLOPT_URL, 'http://localhost/cgi-bin/plugins/test_plugin11/host.sh') привёл к HTTP_HOST=127.0.0.1 в CGI
(устройство r25)47, а curl_init с тем же URL — к HTTP_HOST=localhost
(устройство r25)48; curl_error оба раза пуст (устройство r25)49. Более ранний проверка на устройстве испытала только curl_init($u)
(код r25)50 при HD_HTTP_LOCAL_PORT=80 (устройство r25)51: запрос php_server к
http://localhost/cgi-bin/plugins/test_plugin6/ping.sh пришёл с HTTP_HOST=localhost, а к http://127.0.0.1:80/cgi-bin/plugins/test_plugin6/ping.sh —
с HTTP_HOST=127.0.0.1 (устройство r25)52; ещё две такие же пары в том же запросе лог записал без указания, из php-cgi или
из php_server они пришли (устройство r25)53. file_get_contents к URL вида http://localhost/cgi-bin/plugins/<p>/… пришёл с
HTTP_HOST=127.0.0.1, а curl к тому же URL (в тестовом плагине — curl_init($u)) — с localhost
(устройство r25)54. Читая HTTP_HOST в CGI, сначала смотрите, каким вызовом задан URL.
Порт и хост по способу задать URL (tv188b r25, php_server, один прогон). С PHP_DEBUG=1 и HD_HTTP_LOCAL_PORT=80
curl_setopt(CURLOPT_URL, http://127.0.0.1/cgi-bin/plugins/test_plugin13/host.sh) дал в логе плагина «=H=> EEE orig http» с исходным URL и
«repl http: http://127.0.0.1:80/cgi-bin/plugins/test_plugin13/host.sh», и CURLINFO_EFFECTIVE_URL — тот же URL с :80
(устройство r25)55. Для http://localhost/cgi-bin/plugins/… curl_setopt дал ту же замену на
http://127.0.0.1:80/…, и CGI увидел HTTP_HOST=127.0.0.1 (устройство r25)56. curl_init(url) для обоих URL
замены не показал: CURLINFO_EFFECTIVE_URL остался исходным (без :80, localhost не заменён), CGI для localhost увидел
HTTP_HOST=localhost, а строки «=H=>» на четыре запроса шага были только от двух curl_setopt
(устройство r25)12. Код r25 этих двух путей — в начале абзаца «Локальные URL» выше. Сам CGI host.sh под busybox httpd во всех четырёх запросах видел пустые
SERVER_PORT и SERVER_NAME и HTTP_HOST без порта, в том числе при effective_url с :80: по CGI подстановку порта не видно
(устройство r25)13. Проверять её надо по CURLINFO_EFFECTIVE_URL или строкам «=H=>»
(устройство r25)57. Что осталось непроверенным о других входах — §7.
Перед curl_easy_perform в r25 curl_exec для хоста, который не localhost и не разрешается в 127.x или ::1, ставит опцию
0x4ec3 с обработчиком _php_curl_opensocket_remote (код r25)58; см. §7.
wget. На r25 из php_server команда wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 вернула начало XML
(устройство r25)59. Та же команда с $FS_PREFIX/bin/wget в том же прогоне вернула пустой вывод, причина не
установлена (устройство r25)60. Код выхода [exit 0] в обоих случаях — от head, а не от wget
(устройство r25)61. Практический вывод: вызывать wget
по имени, а успех проверять по выводу, а не по коду конвейера; остальное — см. §7.
В отдельном прогоне (tv188b r25, php_server) which wget показал /data/data/com.dunehd.app/bin/wget — ссылку на libxxx_busybox.so, а вызов по имени к /ping компьютера вернул
ok и rc=0 (устройство r25)6. Прямой вызов этого пути и вызов sh с тем же путём оба вернули rc=126 и cannot execute binary file
(устройство r25)7; причину claim не называет, и пустой вывод из абзаца выше этот прогон не объясняет. По HTTPS wget по имени загрузил
https://www.ssl.com/ в /dev/null с rc=0 и предупреждением TLS certificate validation not implemented (устройство r25)62, тогда как у cURL к этому хосту при
включённой проверке — errno 60 (устройство r25)63.
3.7. Подмена хостов lcreg в HTTP-запросах (r25)¶
В libphp5.so r25 HTTP-помощник вызывает lcreg при отсутствии HD_HTTP_LOCAL_PORT либо для http://-URL, не попавшего под
CGI-подстановку (код r25)64; в r24 этого вызова нет
(код r24)65. Настройки читаются из $FS_PREFIX/config/lcreg.txt и
$FS_PREFIX/config/lcreg_pairs.txt (код r25)66.
Первая строка lcreg.txt: 0 — встроенная таблица lcreg_ru_pairs, 1 — lcreg_pairs.txt, а ошибка чтения или другое значение —
lcreg_kind=-1 (код r25)67, при котором замена не ищется
(код r25)68. Строка пользовательской таблицы — хост : замена, с точным разделителем
: (код r25)69, не больше 1024 пар
(код r25)70. Повторного чтения из состояний −1, 0 и 1
функция инициализации не запускает (код r25)71.
Хост сравнивается по точной длине и с учётом регистра (код r25)72; схема, userinfo, порт и
путь копируются из исходного URL (код r25)73. При успешной замене оба URL печатаются через
printf без проверки PHP_DEBUG (код r25)74.
В прогоне на tv188b r25 ls и cat файла /data/data/com.dunehd.app/config/lcreg.txt вернули No such file or directory (устройство r25)75. Работу lcreg на
устройстве этот прогон не показывает — см. §7.
Расхождения¶
HTTP_HOSTу curl кlocalhostна tv188b r25. Наблюдение сfile_get_contentsзаключает, чтоlocalhostзаменяется на127.0.0.1в потоковой обёртке http, «но не в curl»; curl в этом тестовом плагине задан черезcurl_init($u)(устройство r25)54.curl_setopt(CURLOPT_URL)с тем же видом URL при проверке на устройстве далHTTP_HOST=127.0.0.1(устройство r25)47,curl_init—localhost(устройство r25)48. Стороны связаны какrelated(разный способ задать URL),conflicts_withнет: вывод «не в curl» относится только кcurl_init(url)(§3.6). При проверке на устройстве то же разделение повторилось:curl_setopt—HTTP_HOST=127.0.0.1(устройство r25)56,curl_init—HTTP_HOST=localhost(устройство r25)12.
Не проверено¶
Гипотезы (inference) и disputed; кандидаты на проверку на устройстве. Гипотезы о жизни php_server и операциях —
guide/plugin-operations.md, о CA-бандле — guide/firmware-bugs.md и строки ниже.
| Утверждение | Статус | Claim |
|---|---|---|
Наблюдение проверки на устройстве (curl_setopt(CURLOPT_URL) с http://localhost/cgi-bin/plugins/…, HD_HTTP_LOCAL_PORT=80 → HTTP_HOST=127.0.0.1, REQUEST_URI сохранён) согласуется с заменой префикса localhost по коду r25 (§3.6); порт в ответе CGI не виден (SERVER_PORT пуст), поэтому подстановку именно порта оно не подтверждает. Порт :80 при проверке на устройстве показали строки «=H=>» и effective_url (§3.6) (устройство r25)11 |
inference | (вывод r25)76 |
Вероятная причина обрыва curl_multi проверки на устройстве около curl_multi_getcontent (§3.6) — несогласованное использование поля handle+0x16c в r25: сохранённый URL может читаться как указатель на структуру буфера. Верификатор: адрес сбоя проверки на устройстве с гипотезой согласуется, но поле +0x16c лог не показывает; нужна проверка по листингу zif_curl_multi_getcontent |
inference, disputed | (вывод r25)77 |
Регистр r3 = 0x70747468 в момент падения проверки на устройстве — байты ASCII «http», а fault addr = r3 + 0x28: вероятно, zif_curl_multi_getcontent разыменовал как указатель байты строки URL, что согласуется с гипотезой строкой выше |
inference | (вывод r25)78 |
Программа плагина, запущенная по абсолютному пути вне /firmware/bin/ и /firmware_ext/php/, в APK запускается через sh; связаны ли с этим пустой вывод $FS_PREFIX/bin/wget (устройство r25)60 и rc=126 при вызове полным путём и через sh на r25 (устройство r25)7, claims не говорят |
inference | (вывод r24)79 |
Запросы к http://127.0.0.1/cgi-bin/plugins/… в APK получают порт через CURLOPT_URL и потоки |
inference | (вывод r24)80 |
На tv188b r25 разница между полным бандлом и бандлом из одного корня означает, что cURL в php_server учитывает CURLOPT_CAINFO |
inference | (вывод r25)81 |
| На tv188b r25 истечение Entrust 2026-11-27 не изменит результат для 19 проверенных хостов | inference | (вывод r25)82 |
На tv188b r25 lcreg подменяет хосты Dune HD их парой r2.<хост> |
inference | (вывод r25)83 |
В плагине remote-control HTTP_RAW_POST_DATA в CGI может быть пуст: в его php.ini нет always_populate_raw_post_data |
inference | (вывод)84 |
В базе нет данных о следующем:
HTTP_HOSTи порт приcurl_setopt(CURLOPT_URL)иcurl_init($url)изphp-cgiв CGI плагина (проверка на устройстве проверила их изphp_server, §3.6); процесс безHD_HTTP_LOCAL_PORTи порт не 80; что делает_php_apply_lcreg_to_httpпри таких входах; окружениеphp-cgi— один прогон (php-environment.md §4.1);- печатает ли
PHP_DEBUG=1строки-C-> EEEо замене команд на261021_0117_r25и других прошивках: на261101_0347_r25в одном прогоне — да (устройство r25)85 (php-environment.md §3.11), печать URL — §3.6; работает лиlcregна устройстве и действует ли при отсутствииlcreg.txt(устройство r25)75 ветка ошибки чтения из кода (код r25)67; - причина пустого вывода
$FS_PREFIX/bin/wgetиrc=126при вызове полным путём; HTTPS черезwgetк другим хостам; - какое поле читает
zif_curl_multi_getcontentна +116 (сигнал и кадр сбоя сняты при проверке на устройстве, §3.6); падает лиcurl_multi_getcontentс одним хендлом и приcurl_multiк самому плееру;curl_multiк внешним хостам на r25 и на других прошивках; что делает_php_curl_opensocket_remote; определены ли константы php-environment.md §4.2 на r24 и r22.
-
fw-tv188b-261021-0117-r25.c249 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi curl_version() сообщает version 7.67.0, ssl_version OpenSSL/1.0.1u, libz_version 1.2.11, host arm-unknown-linux-androideabi. ↩↩
-
fw-tv188b-261021-0117-r25.c250 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi не определены константы CURLOPT_ACCEPT_ENCODING, CURLOPT_RESOLVE, CURL_SSLVERSION_TLSv1_2, CURLOPT_SSL_VERIFYSTATUS, CURLOPT_TCP_KEEPALIVE, CURLMOPT_PIPELINING и CURLMOPT_MAXCONNECTS; CURLOPT_ENCODING (10102), CURLOPT_SSLVERSION, CURLOPT_CAINFO, CURLOPT_TIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS, CURLOPT_NOSIGNAL и CURLOPT_IPRESOLVE определены. ↩
-
fw-tv188b-261021-0117-r25.c251 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server и php-cgi файл /firmware/certs/ca-bundle.crt доступен (is_file true; размер 227282, md5 e9dc50a63d76d3c88baa24a4374c4542), как и $FS_PREFIX/firmware/certs/ca-bundle.crt; в нём 143 PEM-блока сертификатов. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c037 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Заголовки CA-бандлов пяти исследованных сборок датируют данные Mozilla 11 октября 2022 года. ↩
-
- fw-tv188b-261021-0117-r25.c350 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды тестового плагина из php_server (uid 1000) дают FS_PREFIX=/data/data/com.dunehd.app; which wget и command -v wget возвращают /data/data/com.dunehd.app/bin/wget.
- fw-tv188b-261021-0117-r25.c351 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/bin/wget — симлинк на $FS_PREFIX/lib/libxxx_busybox.so; /system/bin/libxxx_busybox.so — отдельный файл root:shell размером 987728 байт.
-
fw-tv188b-261021-0117-r25--libphp5.c073 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве which wget из php_server показал /data/data/com.dunehd.app/bin/wget — ссылку на libxxx_busybox.so; вызов по имени wget к /ping компьютера вернул ok и rc=0. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c074 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве прямой вызов /data/data/com.dunehd.app/bin/wget и вызов sh с тем же путём из php_server оба вернули rc=126 и cannot execute binary file. ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c041 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi с RETURNTRANSFER: после curl_multi_info_read (четыре msg=1 result=0) последняя метка — «перед curl_multi_getcontent h0»; php_server 23156 упал с SIGSEGV (SEGV_MAPERR, fault addr 0x70747490), кадр #00 — libphp5.so zif_curl_multi_getcontent+116 (pc 0010e5d0), tombstone записан (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c042 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве после падения php_server в curl_multi_getcontent оболочка получила EOF от PHP-сервера, записала «op 5 failed», PHP_CALL_FAILED и «[handle_user_input] Failed.»; php_server тестового плагина после шага не было (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c040 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi с четырьмя хендлами и CURLOPT_FILE без curl_multi_getcontent прошёл до конца: curl_getinfo вернул 200 у каждого, файлы multi_0..3.out по 3 байта, метка «после curl_multi_close», php_server после шага жив, в logcat -b crash за случай записей нет (один прогон). ↩↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c036 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве с PHP_DEBUG=1 и HD_HTTP_LOCAL_PORT=80 curl_setopt(CURLOPT_URL, http://127.0.0.1/cgi-bin/plugins/test_plugin13/host.sh) дал в логе плагина «=H=> EEE orig http» с исходным URL и «repl http: http://127.0.0.1:80/cgi-bin/plugins/test_plugin13/host.sh», а CURLINFO_EFFECTIVE_URL — тот же URL с :80 (один прогон).
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c037 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве с PHP_DEBUG=1 curl_setopt(CURLOPT_URL, http://localhost/cgi-bin/plugins/test_plugin13/host.sh) дал «repl http: http://127.0.0.1:80/cgi-bin/plugins/test_plugin13/host.sh», CURLINFO_EFFECTIVE_URL с 127.0.0.1:80, а CGI увидел HTTP_HOST=127.0.0.1 (один прогон).
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c038 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_init(url) для http://127.0.0.1/… и http://localhost/cgi-bin/plugins/test_plugin13/host.sh замены не показал: CURLINFO_EFFECTIVE_URL остался исходным (без :80, localhost не заменён), CGI для localhost увидел HTTP_HOST=localhost, и строк «=H=>» на четыре запроса шага было только две пары — от двух curl_setopt (один прогон). ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве CGI host.sh под busybox httpd во всех четырёх запросах к /cgi-bin/plugins/ видел пустые SERVER_PORT и SERVER_NAME и HTTP_HOST без порта — и при effective_url с :80; подстановку порта по CGI не видно (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c026 · code · android-dune-fw; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24 · В strings библиотек libcurl сборок tv188b r22, r24, r25 и tv175u r24 присутствует libcurl/7.67.0. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c028 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Наборы имён curl_multi_* (12) и CURLOPT_* (111) в strings libphp5.so совпадают у всех пяти исследованных сборок. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c056 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::http_get_document по умолчанию отключает проверку TLS-сертификата (CURLOPT_SSL_VERIFYPEER=false), следует редиректам, ставит CURLOPT_ENCODING=1 и тайм-ауты из $DEFAULT_CURL_*; опции вызывающего применяются поверх ↩
-
fw-tv188b-260827-0003-r24--php-framework.c058 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::http_get_document бросает DuneCurlException при ошибке curl и при любом HTTP-коде, кроме 200 (включая 301/302/304); при ошибке curl создаёт флаг /tmp/run/network_monitor/force_check_on_error ↩
-
fw-tv188b-260827-0003-r24--php-framework.c059 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::http_get_document по умолчанию пишет в лог через hd_print URL, POST-поля и итог запроса; параметр $silent=true это отключает ↩
-
fw-tv188b-261021-0117-r25.c023 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · HD::http_get_document в r25 пишет в лог « http <метод>:
» (метод — CURLOPT_CUSTOMREQUEST, иначе POST при CURLOPT_POSTFIELDS, иначе GET) и « http DATA: …» вместо «HTTP fetching»/«HTTP POST fields»; сообщения об ошибках — в нижнем регистре («http request failed (код)») ↩ -
fw-tv188b-260827-0003-r24--php-framework.c082 · code · tv188b, tv175u, android-dune-fw; прошивка 240619_0210_r22, 250815_1012_r22, 260724_0207_r24, 260827_0003_r24 · bootstrap.php, dune_config.php, dune_plugin.php и dunelib/dune_countries.php одинаковы (sha256) в tv175u 240619_0210_r22, tv188b 250815_1012_r22 и r24-прошивках; dunelib/config_utils, dune_languages, expr, utils в r22-прошивках отсутствуют ↩
-
fw-tv188b-261021-0117-r25--libphp5.c036 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · CA-бандлы всех пяти исследованных сборок совпадают по SHA-256 722be2869ed2c2a949e5edb75b030f1e737e869ca8e8f70bc8d876dd93227ead. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c057 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Если вызывающий передал CURLOPT_SSL_VERIFYPEER=true для https-URL, HD::http_get_document подставляет CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt ↩
-
fw-tv188b-261021-0117-r25.c234 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку), выполнивший curl_multi на 4 хендла к httpd самого плеера (http://127.0.0.1/plugins/…, http://127.0.0.1:80/cgi-bin/plugins/…, http://localhost/cgi-bin/plugins/…), доходит до curl_multi_info_read и получает все 4 сообщения с msg=1 result=0, после чего php-cgi завершается с кодом 139 и в /tmp/dune_apk_cgi_err.log появляется «Segmentation fault»; повторный запуск дал то же самое. ↩
-
fw-tv188b-261021-0117-r25.c235 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тот же тестовый плагин curl_multi (4 хендла к httpd плеера) в php_server PHP-плагина (операция handle_user_input) доходит до curl_multi_info_read со всеми 4 сообщениями msg=1 result=0; результата операция не возвращает: через ~0,25 с после её начала оболочка пишет в shell.log «[test_plugin6] [php] E: op 11 failed (read status: 2).», «shutting down...», «stopped.» и «Error: operation returned PHP_CALL_FAILED.». ↩
-
fw-tv188b-261021-0117-r25.c236 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после сбоя операции handle_user_input php_server с «op 11 failed (read status: 2)» и PHP_CALL_FAILED оболочка пишет «FATAL ERROR detected (msg = Ошибка приложения)» и показывает диалог «Ошибка приложения / Произошла ошибка. Приложение будет закрыто.» с кнопкой OK; после закрытия плеер не завис. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c025 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi на четырёх HTTP-хендлах к компьютеру записал четыре info_read msg=1 result=0 и строку после curl_multi_info_read. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c026 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве шаг multi не записал end за 25 с; сохранённый отчёт обрывается после curl_multi_info_read, без h0 и curl_multi_close прошёл, а заголовок сбора уже показывает php_server(test_plugin11)=нет. ↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c026 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве шаг multi не записал end за 25 с; сохранённый отчёт обрывается после curl_multi_info_read, без h0 и curl_multi_close прошёл, а заголовок сбора уже показывает php_server(test_plugin11)=нет.
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c028 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве curl_getinfo(h0, CURLINFO_HTTP_CODE) записал возврат 200; последняя строка отчёта — «перед curl_multi_getcontent h0», без последующей метки этого вызова.
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c027 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве на четырёх HTTP-хендлах к компьютеру после curl_multi_exec(run=0) пять вызовов curl_multi_info_read вернули четыре пары msg=1/result=0, затем false; каждый вызов имеет метки до и после. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c028 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве curl_getinfo(h0, CURLINFO_HTTP_CODE) записал возврат 200; последняя строка отчёта — «перед curl_multi_getcontent h0», без последующей метки этого вызова. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c029 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве оболочка получила EOF от PHP-сервера, записала PHP_CALL_FAILED и stopped; end multi за 25 с не появился, а при сборе php_server тестового плагина уже не найден. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c030 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве HTTP-сервер компьютера зарегистрировал все четыре GET /ping?multi=0..3 и ответил на каждый статусом 200, отдав по 3 байта. ↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c040 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi с четырьмя хендлами и CURLOPT_FILE без curl_multi_getcontent прошёл до конца: curl_getinfo вернул 200 у каждого, файлы multi_0..3.out по 3 байта, метка «после curl_multi_close», php_server после шага жив, в logcat -b crash за случай записей нет (один прогон).
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c041 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi с RETURNTRANSFER: после curl_multi_info_read (четыре msg=1 result=0) последняя метка — «перед curl_multi_getcontent h0»; php_server 23156 упал с SIGSEGV (SEGV_MAPERR, fault addr 0x70747490), кадр #00 — libphp5.so zif_curl_multi_getcontent+116 (pc 0010e5d0), tombstone записан (один прогон).
-
- fw-tv188b-261021-0117-r25.c361 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина test_plugin8 (pid 3005, ppid 2449, uid 1000) HD_HTTP_LOCAL_PORT=80.
- fw-tv188b-261021-0117-r25--libphp5.c061 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве /proc/self/environ php_server test_plugin11 содержал PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, FS_PREFIX=/data/data/com.dunehd.app, TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app и HD_HTTP_LOCAL_PORT=80.
-
fw-tv188b-261021-0117-r25.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 TCP-порт 80 (*:80) слушает процесс httpd. ↩
-
fw-apk-260724-0207-r24--data-deploy.c033 · code · android-atv; прошивка 260724_0207_r24 · runDaemonProcess задаёт HD_HTTP_LOCAL_PORT=11080 (константа HDConfig.HD_HTTP_LOCAL_PORT, подставлена в байткод как const/16 11080) ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · php_plugin.c: в libduneshell.so рядом стоят имена install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url с шаблоном http://127.0.0.1:%d/plugins/%s/ и plugin_cgi_url с шаблоном http://127.0.0.1:%d/cgi-bin/plugins/%s/, а также вызов DunePluginFw::$instance->call_plugin ↩
-
fw-tv188b-261021-0117-r25.c289 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у test_plugin5 plugin_www_url = 'http://127.0.0.1:80/plugins/test_plugin5/', plugin_cgi_url = 'http://127.0.0.1:80/cgi-bin/plugins/test_plugin5/' — с явным портом 80. ↩
-
- fw-tv188b-261021-0117-r25.c157 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из PHP внутри плеера (php-cgi в CGI плагина) curl-запрос к http://127.0.0.1/plugins/test_plugin6/index.txt вернул HTTP 200 и содержимое www/index.txt.
- fw-tv188b-261021-0117-r25.c158 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина исполняется и по запросам изнутри плеера: curl из php-cgi (CGI test_plugin6) и из php_server плагина test_plugin6 к http://127.0.0.1:80/cgi-bin/plugins/test_plugin6/ping.sh и http://localhost/cgi-bin/plugins/test_plugin6/ping.sh запустил ping.sh с REMOTE_ADDR=[::ffff:127.0.0.1].
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c002 · code · android-dune-fw; прошивка 261021_0117_r25 · В URL-ветви опции 0x2712 обработчик _php_curl_setopt r25 передаёт строку через _php_add_fs_prefix_to_http перед php_curl_option_url.isra.7. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c018 · code · android-dune-fw; прошивка 260827_0003_r24 · В URL-ветви опции 0x2712 обработчик _php_curl_setopt r24 передаёт строку через _php_add_http_port перед php_curl_option_url.isra.6. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c020 · code · android-dune-fw; прошивка 260827_0003_r24 · В r24 _php_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет префикс http://127.0.0.1/cgi-bin/plugins/ или http://localhost/cgi-bin/plugins/ на http://127.0.0.1:
/cgi-bin/plugins/ с сохранением хвоста — та же CGI-подстановка, что в r25. ↩ -
fw-tv188b-261021-0117-r25--libphp5--curl-http.c032 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет префикс URL http://localhost/cgi-bin/plugins/ на http://127.0.0.1:
/cgi-bin/plugins/, сохраняя хвост URL. ↩ -
fw-tv188b-261021-0117-r25--libphp5--curl-http.c033 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет и префикс без порта http://127.0.0.1/cgi-bin/plugins/ на http://127.0.0.1:
/cgi-bin/plugins/ тем же кодом. ↩ -
fw-tv188b-261021-0117-r25--libphp5--curl-http.c034 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http без HD_HTTP_LOCAL_PORT, а также для http://-URL с другим хостом или путём порт не подставляет и передаёт URL в _php_apply_lcreg_to_http; URL не на http:// возвращается без обработки. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c016 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 zif_curl_init при переданном URL вызывает php_curl_option_url.isra.7 напрямую; HTTP-подстановка перед этим вызовом есть в URL-ветви _php_curl_setopt, поэтому эти две точки входа имеют разный маршрут обработки URL. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c023 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_setopt(CURLOPT_URL,http://localhost/cgi-bin/plugins/test_plugin11/host.sh) из php_server привёл к CGI HTTP_HOST=127.0.0.1 и пустой curl_error. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c024 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_init(http://localhost/cgi-bin/plugins/test_plugin11/host.sh) из php_server привёл к CGI HTTP_HOST=localhost и пустой curl_error. ↩↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c023 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_setopt(CURLOPT_URL,http://localhost/cgi-bin/plugins/test_plugin11/host.sh) из php_server привёл к CGI HTTP_HOST=127.0.0.1 и пустой curl_error.
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c024 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_init(http://localhost/cgi-bin/plugins/test_plugin11/host.sh) из php_server привёл к CGI HTTP_HOST=localhost и пустой curl_error.
-
fw-tv188b-261021-0117-r25.c380 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Тестовый плагин проверки на устройстве (kbp6_curl_multi_report) задаёт URL каждого запроса curl_multi через curl_init($u), а не через curl_setopt(CURLOPT_URL); функцию вызывают CGI cm.php (ctx cgi) и main.php php_server (ctx php_server). ↩
-
fw-tv188b-261021-0117-r25.c381 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина test_plugin6 (проверка на устройстве) HD_HTTP_LOCAL_PORT=80. ↩
-
fw-tv188b-261021-0117-r25.c378 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве php_server плагина test_plugin6 (отчёт curl_multi ctx=php_server, 15:08:30), задавший URL через curl_init($u), обратился к http://localhost/cgi-bin/plugins/test_plugin6/ping.sh?via=localhost — CGI получил HTTP_HOST=localhost; запрос к http://127.0.0.1:80/cgi-bin/plugins/test_plugin6/ping.sh?via=127.0.0.1 пришёл с HTTP_HOST=127.0.0.1. ↩
-
fw-tv188b-261021-0117-r25.c379 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве в 15:06:43 лог ping.sh test_plugin6 записал ещё две пары запросов тестового плагина: с via=localhost — HTTP_HOST=localhost, с via=127.0.0.1 — HTTP_HOST=127.0.0.1; из какого контекста (CGI cm.php или php_server) пришла каждая пара, этот лог не записывает. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c041 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запрос из php_server функцией file_get_contents к http://localhost/cgi-bin/plugins/
/… приходит в httpd с HTTP_HOST=127.0.0.1, а curl к тому же URL — с HTTP_HOST=localhost: localhost заменяется на 127.0.0.1 в потоковой обёртке http, но не в curl. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c036 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве с PHP_DEBUG=1 и HD_HTTP_LOCAL_PORT=80 curl_setopt(CURLOPT_URL, http://127.0.0.1/cgi-bin/plugins/test_plugin13/host.sh) дал в логе плагина «=H=> EEE orig http» с исходным URL и «repl http: http://127.0.0.1:80/cgi-bin/plugins/test_plugin13/host.sh», а CURLINFO_EFFECTIVE_URL — тот же URL с :80 (один прогон). ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c037 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве с PHP_DEBUG=1 curl_setopt(CURLOPT_URL, http://localhost/cgi-bin/plugins/test_plugin13/host.sh) дал «repl http: http://127.0.0.1:80/cgi-bin/plugins/test_plugin13/host.sh», CURLINFO_EFFECTIVE_URL с 127.0.0.1:80, а CGI увидел HTTP_HOST=127.0.0.1 (один прогон). ↩↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c036 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве с PHP_DEBUG=1 и HD_HTTP_LOCAL_PORT=80 curl_setopt(CURLOPT_URL, http://127.0.0.1/cgi-bin/plugins/test_plugin13/host.sh) дал в логе плагина «=H=> EEE orig http» с исходным URL и «repl http: http://127.0.0.1:80/cgi-bin/plugins/test_plugin13/host.sh», а CURLINFO_EFFECTIVE_URL — тот же URL с :80 (один прогон).
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве CGI host.sh под busybox httpd во всех четырёх запросах к /cgi-bin/plugins/ видел пустые SERVER_PORT и SERVER_NAME и HTTP_HOST без порта — и при effective_url с :80; подстановку порта по CGI не видно (один прогон).
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c022 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 zif_curl_exec перед curl_easy_perform читает сохранённый URL из поля handle +0x16c; если хост (после http:// или https://, без userinfo и порта) не localhost/localhost. и не разрешается getaddrinfo в 127.x или ::1, либо URL пуст или с другой схемой, ставит опцию 0x4ec3 с обработчиком _php_curl_opensocket_remote. ↩
-
fw-tv188b-261021-0117-r25.c352 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команда wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) вернула начало XML-ответа
<param name="protocol_version" value="6"; [exit 0] — код head в конвейере, а не wget. ↩ -
fw-tv188b-261021-0117-r25.c353 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вызов $FS_PREFIX/bin/wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) в том же прогоне вернул пустой вывод, а [exit 0] — код head в конвейере; причина не установлена. ↩↩
-
- fw-tv188b-261021-0117-r25.c352 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команда wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) вернула начало XML-ответа
<param name="protocol_version" value="6"; [exit 0] — код head в конвейере, а не wget. - fw-tv188b-261021-0117-r25.c353 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вызов $FS_PREFIX/bin/wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) в том же прогоне вернул пустой вывод, а [exit 0] — код head в конвейере; причина не установлена.
- fw-tv188b-261021-0117-r25.c352 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команда wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) вернула начало XML-ответа
-
fw-tv188b-261021-0117-r25--libphp5.c075 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве wget по имени из php_server загрузил https://www.ssl.com/ в /dev/null с rc=0 и предупреждением TLS certificate validation not implemented. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c050 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · www.ssl.com на tv188b r25 из php_server (uid 1000) с полным бандлом, без корня Entrust и только с корнем Entrust при включённой проверке TLS даёт errno 60 «self signed certificate in certificate chain»; без проверки — HTTP 200, а цепочка заканчивается самоподписанным SSL.com TLS RSA Root CA 2022. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c004 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http вызывает lcreg при отсутствии HD_HTTP_LOCAL_PORT либо для http:// URL, не попавшего под CGI-подстановку; при заданной HD_HTTP_LOCAL_PORT URL без префикса http:// выходит до lcreg. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c021 · code · android-dune-fw; прошивка 260827_0003_r24 · В r24 _php_add_fs_prefix_to_http не вызывает lcreg и других функций замены хоста; при отсутствии HD_HTTP_LOCAL_PORT или несовпадении префикса URL не меняется, а печать исходного и нового URL ограждена getenv("PHP_DEBUG"). ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c006 · code · android-dune-fw; прошивка 261021_0117_r25 · Инициализация lcreg r25 читает настройки из FS_PREFIX + /config/lcreg.txt и FS_PREFIX + /config/lcreg_pairs.txt; при отсутствии FS_PREFIX использует пустой префикс. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c007 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 lcreg_kind выбирается через atoi первой строки lcreg.txt: 0 выбирает встроенную таблицу lcreg_ru_pairs, 1 читает lcreg_pairs.txt; ошибка открытия/чтения lcreg.txt, результат вне 0/1 или недоступный файл пар дают lcreg_kind=-1. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c011 · code · android-dune-fw; прошивка 261021_0117_r25 · lcreg_get_replacement r25 ищет замену только при lcreg_kind>=0 и префиксе http:// либо https://, сравниваемом через strncmp с учётом регистра. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c008 · code · android-dune-fw; прошивка 261021_0117_r25 · В режиме lcreg_kind=1 r25 принимает строки пар с точным разделителем « : »; строку без него пропускает, левую часть копирует до разделителя, правую — начиная через три байта после него, удаляя завершающий LF. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c009 · code · android-dune-fw; прошивка 261021_0117_r25 · Чтение пользовательской таблицы lcreg r25 ограничено 1024 принятыми парами; отдельный fgets вызывается с размером 0x400. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c010 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 lcreg_ensure_initialized вызывает lcreg_do_initialize только при lcreg_kind=-2; состояния -1, 0 и 1 не запускают повторное чтение через эту функцию. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c012 · code · android-dune-fw; прошивка 261021_0117_r25 · Для lcreg r25 имя хоста выделяется после последнего @ перед первым / (либо концом строки) и до первого : в этой части; совпадение с таблицей требует равной длины и memcmp без изменения регистра. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c013 · code · android-dune-fw; прошивка 261021_0117_r25 · При совпадении lcreg r25 _php_apply_lcreg_to_http создаёт новую строку из исходного префикса до хоста, замены из таблицы и исходного хвоста после хоста; схема, userinfo и хвост с портом/путём копируются из исходного URL. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c005 · code · android-dune-fw; прошивка 261021_0117_r25 · При успешной замене lcreg функция _php_apply_lcreg_to_http r25 печатает исходный и новый URL через printf без проверки PHP_DEBUG. ↩
-
fw-tv188b-261021-0117-r25.c377 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве ls и cat /data/data/com.dunehd.app/config/lcreg.txt вернули No such file or directory. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c035 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Наблюдение проверки на устройстве (curl_setopt(CURLOPT_URL) с http://localhost/cgi-bin/plugins/…, HD_HTTP_LOCAL_PORT=80 → HTTP_HOST=127.0.0.1, REQUEST_URI сохранён) согласуется с заменой префикса localhost по c032; порт в ответе CGI не виден (SERVER_PORT пуст), поэтому подстановку именно порта оно не подтверждает. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c031 · inference, disputed · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Вероятная причина прекращения multi проверки на устройстве около curl_multi_getcontent — несогласованное использование поля handle+0x16c в r25: сохранённый URL может интерпретироваться как указатель на структуру буфера. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c043 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Регистр r3 = 0x70747468 в момент падения равен байтам ASCII «http» (little-endian), а fault addr = r3 + 0x28; вероятно, в zif_curl_multi_getcontent как указатель разыменованы байты строки URL — это согласуется с гипотезой c031 о несогласованном поле handle+0x16c. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c013 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK программа плагина, запущенная exec/shell_exec по абсолютному пути вне /firmware/bin/ и /firmware_ext/php/ (например /flashdata/plugins/<плагин>/bin/x или $FS_PREFIX/…), запускается как «sh <путь>»: shell-скрипт так работает и без бита x, а ELF-бинарник — нет ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c038 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK запросы плагина к http://127.0.0.1/cgi-bin/plugins/… и http://localhost/cgi-bin/plugins/… через curl_setopt($ch, CURLOPT_URL, …) и через потоки (fopen, file_get_contents) уходят на http://127.0.0.1:
/cgi-bin/plugins/… (в APK порт 11080), так что адрес без порта работает ↩ -
fw-tv188b-261021-0117-r25--libphp5.c049 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Разница между полным бандлом и бандлом только из корня Entrust на одних и тех же 17 хостах в прогоне из php_server (uid 1000) при включённой проверке TLS означает, что PHP cURL в php_server r25 учитывает CURLOPT_CAINFO, а не только системное хранилище. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c052 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Истечение «Entrust Root Certification Authority» 2026-11-27 не должно изменить результат HTTPS для 17 из 19 хостов hosts10.txt, успешных 2026-11-02, при запросах из php_server (uid 1000): уже 2026-11-02 все они проходят проверку без этого корня. Это не прогноз для сайтов вне hosts10.txt и для двух хостов, не прошедших проверку (www.ssl.com, kodikapi.com). ↩
-
fw-tv188b-261021-0117-r25--shell-ext--movies.c061 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · lcreg (common/mt/lcreg.c, общий для нативных библиотек) подменяет хосты Dune HD их парой r2.<хост> (в том числе dunemdb.dune-hd.com → r2.dunemdb.dune-hd.com) по настройке /config/lcreg.txt и lcreg_pairs.txt. ↩
-
plg-dune-remote-control.c032 · inference · unknown; прошивка — · Вероятно, put/append на устройстве не работают: код читает тело POST только из $HTTP_RAW_POST_DATA, а в php.ini рядом с php-cgi нет always_populate_raw_post_data и php://input нигде не используется — тогда разбирается пустой
и возвращается operation_failed. ↩ -
fw-tv188b-261021-0117-r25--libphp5.c100 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) putenv("PHP_DEBUG=1") в php_server вернул true и getenv дал 1 (в /proc/self/environ переменной нет), после чего каждый exec/shell_exec с заменой пути записал в лог плагина /tmp/run/test_plugin14.log пару « -C-> EEE orig command / repl command» (6 строк на 3 вызова); «=H=>» — 0, в shell.log маркеров нет. ↩