Перейти к содержанию

Реестр ошибок прошивки и SDK

Сводка: найденные в базе ошибки прошивки Dune HD и SDK плагинов. Каждое фактическое предложение ссылается на claim id. Гипотезы и ослабленные верификатором утверждения — только в разделе «Не проверено». Пометка «r25, device» — наблюдение на одном устройстве tv188b с прошивкой 261021_0117_r25 (тестовые плагины test_plugin*); на другие прошивки и устройства оно не переносится.

1. Что это и как читать

Реестр собирает найденные в базе ошибки прошивки Dune HD и SDK плагинов (dune_plugins). Он нужен двум читателям: разработчику плагина — чтобы знать ошибку и обход, и человеку, который пишет разработчикам Dune, — как основа писем. Запись реестра — это то, что можно показать разработчикам прошивки: факт со ссылкой на claim и, где есть, ожидание со ссылкой на SDK или на собственный код прошивки.

Что считается ошибкой. Класс записи — один из четырёх:

Класс Что входит
прошивка падение, зависание, гонка; код противоречит собственному контракту или соседнему коду (параметр теряется, функция-заглушка, true при неудаче); ссылка на несуществующий файл; устаревшие данные с датой истечения
поведение против SDK устройство или код делают не то, что написано в SDK; в записи — обе стороны со ссылками
документация SDK SDK противоречит сам себе или коду прошивки, который описывает
безопасность небезопасное умолчание во фреймворке прошивки

Что не входит. Особенности по замыслу, о которых надо просто знать (PHP 5.3, 32-битные целые, нет констант JSON), — в guide/pitfalls.md. Ошибки сторонних плагинов в реестр не входят. Исключение — плагины, которые обходят ошибку прошивки: это косвенный признак, и такие случаи стоят в «Не проверено», пока нет claim прошивки.

Уровень в таблице — самый сильный уровень claims, на которых держится сама ошибка: device — наблюдалось на устройстве (есть лог наблюдения), code — так написано в коде прошивки (это не значит, что так работает), doc — текст SDK. Запись вида «device / doc» — наблюдение на устройстве против текста SDK.

Важность для плагинов — редакторская оценка:

Важность Критерий
высокая падение, потеря данных или контракт, который не работает и не обходится
средняя контракт нарушен, но есть обход, или последствия ограничены
низкая косметика, документация, внутренний код прошивки без показанного эффекта для плагинов

Ожидание в записи — ссылка на SDK-claim или на собственный код прошивки; если его нет, так и написано: «ожидание — только по смыслу». Столбец «сообщено» показывает, сообщено ли об ошибке разработчикам. Новые находки попадают в реестр по мере разбора.

2. Сводная таблица

BUG Кратко Класс Компонент Где наблюдалось Уровень Важность Сообщено
BUG-001 CA-бандл 2022 года, Entrust истекает 2026-11-27 прошивка /firmware/certs/ca-bundle.crt файл: tv188b r22, r24, r25; tv175u r24; APK r24 (код); HTTPS: tv188b r25 (device) device / code средняя: 17 из 19 проверенных хостов проходят и без корня Entrust (устройство r25)1, www.ssl.com падает уже сейчас (устройство r25)2 нет
BUG-002 curl_multi → Segmentation fault / PHP_CALL_FAILED прошивка php-cgi, php_server tv188b r25 (четыре проверки на устройстве) device высокая нет
BUG-003 HD::http_get_document без проверки TLS безопасность dunelib/utils.php tv188b r24, r25 code средняя нет
BUG-004 тайм-аут handle_user_input по умолчанию 60 с, не 10 с поведение против SDK исполнитель операций tv188b r25 device / doc средняя нет
BUG-005 operation_timeout: секунды в манифесте, мс в действии документация SDK plugin_handle_user_input tv188b r24 (код), r25 (device) device / code / doc средняя нет
BUG-006 launch_ext_app с delay ≤ 0: error_action поверх приложения прошивка launch_ext_app tv188b r25 device / code средняя нет
BUG-007 playback_going_to_switch в конце последней серии поведение против SDK VOD плагина tv188b r25 device / doc средняя нет
BUG-008 .platform.* на Android — обратное тексту SDK поведение против SDK установщик плагинов tv188b r25 device / doc средняя нет
BUG-009 IP Control open_path не запускает точку входа поведение против SDK IP Control tv188b r25 device / doc средняя нет
BUG-010 adb push в /flashdata/plugins/ из SDK поведение против SDK развёртывание плагина tv188b r25 device / doc средняя нет
BUG-011 сбой movie_suppliers_update.sh без повтора прошивка shell_ext async_worker tv188b r24 (код), r25 (device, код) device / code средняя нет
BUG-012 $FS_PREFIX в shell_exec непоследовательно прошивка встроенный PHP tv188b r25 (device); APK r24 (код) device / code средняя нет
BUG-013 чёрный главный экран после cmd=main_screen прошивка оболочка tv188b r25 device средняя нет
BUG-038 fs_ctl scandir с ошибкой: неверный JSON в output_path прошивка fs_ctl tv188b r25 (scandir, get_file: device, по одному прогону; код) device / code средняя нет
BUG-014 httpd: 302 на каталог ведёт на 404 прошивка httpd tv188b r25 device низкая нет
BUG-015 httpd: .mkv с Content-type: text/html прошивка httpd tv188b r25 device низкая нет
BUG-016 media_check вызывает несуществующий ffmpeg.sh прошивка shell_ext/bin/media_check tv188b r25 (device); файл в образах r24, r25 (code) device / code низкая нет
BUG-017 метки времени в логах на 3 ч меньше прошивка shell.log, /tmp/run/<плагин>.log tv188b r25 device низкая нет
BUG-018 MainVod теряет hls_ignore_chunk_errors прошивка встроенный ktv_start tv188b r25 code низкая нет
BUG-019 apiHttpPost/SettingsWrite — true при неудаче прошивка downloads/ext/TorrServer.php tv188b r25 code низкая нет
BUG-020 HD::get_item — заглушка прошивка dunelib/utils.php tv188b r24 code низкая нет
BUG-021 AppShortcuts::static_init: аргументы не совпадают прошивка shell_ext, android_apps tv188b r25 code низкая нет
BUG-022 PluginFolderRows::$rows при константе прошивка MovieListScreen tv188b r25 code низкая нет
BUG-023 $movie без присваивания в normal_play прошивка shell_ext movie-screen tv188b r25 code низкая нет
BUG-024 no_transition/no_animation при вставке строк прошивка shell_ext gcomp-list tv188b r24 code низкая нет
BUG-025 get_epfs_params_path игнорирует $tmp прошивка shell_ext/lib tv188b r25 code низкая нет
BUG-026 stop.php: «10 sec» при ожидании 20 с прошивка shell_ext tv188b r24 code низкая нет
BUG-037 тип маркера recap: в нативном коде строка с обратной кавычкой прошивка libduneshell.so, StreamMarkerType код: tv188b r25; тип в shell.log и кнопка на OSD: tv188b r25, один прогон device / code низкая нет
BUG-027 restart_gui описан как перезагрузка документация SDK ChangeSettingsAction SDK; tv188b r25 device / doc низкая нет
BUG-028 buffering_ms «не реализован», r25 применяет документация SDK PluginVodInfo SDK; tv188b r25 device / doc низкая нет
BUG-029 имя параметра get_vod_stream_url документация SDK DunePlugin SDK; tv188b r25 device / doc низкая нет
BUG-030 тип результата change_tv_favorites() документация SDK DunePlugin SDK; tv188b r24 code / doc низкая нет
BUG-031 archive_past_days против archive_past_sec документация SDK PluginTvChannel SDK doc низкая нет
BUG-032 'protected': get_tv_playback_url или get_tv_stream_url документация SDK ТВ плагина SDK doc низкая нет
BUG-033 тип движка: только php или ещё plain документация SDK манифест SDK doc низкая нет
BUG-034 тип series_media_url — Boolean документация SDK PluginMovieFolderView SDK; tv188b r24 code / doc низкая нет
BUG-035 имя класса данных PluginUpdateFolderAction документация SDK dune_api.php SDK; tv188b r24 code / doc низкая нет
BUG-036 версия появления global plugin actions документация SDK манифест SDK doc низкая нет

3. Записи: высокая важность

BUG-002. curl_multi: Segmentation fault, PHP_CALL_FAILED и обрыв с хендлами к компьютеру

Класс: прошивка (падение). Компонент: встроенный PHP — php-cgi CGI плагина и php_server. Где: tv188b r25, device: четыре проверки на устройстве.

Что происходит. CGI-скрипт плагина, выполнивший curl_multi на 4 хендла к httpd самого плеера, получает в curl_multi_info_read все 4 сообщения с msg=1 result=0, после чего php-cgi завершается с кодом 139, а в /tmp/dune_apk_cgi_err.log — «Segmentation fault»; повтор дал то же (устройство r25)3. В php_server (операция handle_user_input) тот же код доходит до того же места, а оболочка пишет «op 11 failed (read status: 2)», «shutting down...» и «Error: operation returned PHP_CALL_FAILED» (устройство r25)4. Пользователь видит диалог «Ошибка приложения / Произошла ошибка. Приложение будет закрыто.»; плеер после него не завис (устройство r25)5.

Две следующие проверки повторили сценарий в php_server на четырёх HTTP-хендлах уже не к httpd плеера, а к компьютеру. В первой из них записаны четыре info_read с msg=1 result=0 и строка после curl_multi_info_read (устройство r25)6; end шага за 25 с не появился, отчёт обрывается без h0 и без curl_multi_close, а при сборе php_server тестового плагина уже не было (устройство r25)7. Вторая расставила метки до и после каждого вызова. Пять вызовов curl_multi_info_read вернули четыре пары msg=1/result=0, затем false (устройство r25)8; curl_getinfo(h0, CURLINFO_HTTP_CODE) вернул 200, а последняя строка отчёта — «перед curl_multi_getcontent h0», без метки после этого вызова (устройство r25)9. Оболочка получила EOF от PHP-сервера и записала PHP_CALL_FAILED; end multi за 25 с не появился (устройство r25)10. Сервер компьютера при этом зарегистрировал все четыре GET /ping?multi=0..3 и ответил на каждый 200 (устройство r25)11. Обрыв во второй проверке лежит между меткой «перед curl_multi_getcontent h0» и меткой после этого вызова; сбой в самом curl_multi_getcontent и в обработке или записи его результата лог не различает (устройство r25)9. Код выхода и сигнал php_server в этой проверке не сняты; «Segmentation fault» и код 139 записаны только для php-cgi первой проверки (устройство r25)12.

Последняя проверка (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)13. Оболочка получила EOF от PHP-сервера, записала «op 5 failed», PHP_CALL_FAILED и «[handle_user_input] Failed.», а php_server тестового плагина после шага не было (устройство r25)14. Тот же curl_multi на четырёх хендлах с CURLOPT_FILE и без curl_multi_getcontent прошёл до конца: curl_getinfo вернул 200 у каждого хендла, php_server после шага жив, в logcat -b crash записей нет (устройство r25)15. Какое поле читает функция в точке падения, — в «Не проверено».

Что ожидалось. Ожидание — только по смыслу: функции curl_multi_* в libphp5.so есть во всех пяти разобранных сборках (код r22, r24, r25)16, и падать на штатном сценарии они не должны.

Как воспроизвести. Тестовый плагин test_plugin6, функция в lib/kbp6_rt.php первой проверки: 4 хендла к http://127.0.0.1/plugins/…, http://127.0.0.1:80/cgi-bin/plugins/…, http://localhost/cgi-bin/plugins/… (устройство r25)3. Тестовый плагин test_plugin12, lib/kbp12_steps.php второй проверки (отчёт files/71-d-multi.txt): 4 хендла GET /ping?multi=0..3 к HTTP-серверу компьютера, метки до и после каждого вызова (устройство r25)17. Последняя проверка (отчёты files/74-k-multi-gc.txt — с curl_multi_getcontent, files/73-k-multi-nogc.txt — с CURLOPT_FILE) (устройство r25)18.

Обход в плагине. Тело ответа писать в файл через CURLOPT_FILE и не вызывать curl_multi_getcontent: в одном прогоне этой проверки так сбоя не было (устройство r25)15, а с curl_multi_getcontent был (устройство r25)13. Других обходов в claims нет.

4. Записи: средняя важность

BUG-001. CA-бандл /firmware/certs/ca-bundle.crt 2022 года, Entrust истекает 2026-11-27

Класс: прошивка (устаревшие данные с датой истечения). Компонент: /firmware/certs/ca-bundle.crt. Где: файл — tv188b 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, tv175u 260724_0207_r24, APK 1.0.1-1000-260724_0207_r24; code. HTTPS-запросы с ним — tv188b 261021_0117_r25, device.

Важность: средняя (была высокая). Основание — критерий «последствия ограничены» из §1: на tv188b r25 из php_server 17 из 19 проверенных хостов проходят проверку TLS и с этим бандлом, и без корня Entrust Root Certification Authority (устройство r25)19, а наблюдаемый отказ по проверке один — www.ssl.com (устройство r25)2. Низкой запись не стала: этот эффект показан на устройстве (устройство r25)2. Оценка держится на этих 19 хостах; бандл 2022 года и срок 2026-11-27 остаются фактами, пересмотр касается только последствий для этих хостов.

Что происходит. CA-бандл во всех пяти разобранных сборках один и тот же файл (SHA-256 722be286…) (код r22, r24, r25)20. Его заголовок датирует данные Mozilla 11 октября 2022 года (код r22, r24, r25)21; в бандле r25 143 сертификата (код r25)22. В общем бандле пять корней уже истекли: Staat der Nederlanden EV Root CA — 2022-12-08 (код r22, r24, r25)23, E-Tugra Certification Authority — 2023-03-03 (код r22, r24, r25)24, Hongkong Post Root CA 1 — 2023-05-15 (код r22, r24, r25)25, Security Communication RootCA1 — 2023-09-30 (код r22, r24, r25)26, Baltimore CyberTrust Root — 2025-05-12 (код r22, r24, r25)27. Ближайший срок — Entrust Root Certification Authority, 2026-11-27 20:53:42 UTC (код r22, r24, r25)28; позже — Certigna, 2027-06-29 (код r22, r24, r25)29, и GlobalSign Root CA, 2028-01-28 (код r22, r24, r25)30.

Кто им пользуется. В r24 HD::http_get_document подставляет CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt, если вызывающий передал CURLOPT_SSL_VERIFYPEER=true для https-URL (код r24)31. Встроенный ktv_start r25 (StartApi::api_call) ходит с CURLOPT_SSL_VERIFYPEER=true и этим бандлом (код r25)32. На r25 (device) файл доступен из php_server и php-cgi (устройство r25)33.

Что показал прогон на 19 хостах (r25, device). Прогон (список — hosts10.txt, результаты — files/42-tls.txt) выполнен 2026-11-02 на tv188b 261021_0117_r25 из php_server (uid 1000) при включённой проверке TLS. С полным бандлом 17 из 19 хостов получили errno 0, исключения — www.ssl.com (errno 60) и kodikapi.com (errno 35) (устройство r25)34. С бандлом без сертификата «Entrust Root Certification Authority» — те же 17 хостов и те же исключения; убран был только этот сертификат, 143 → 142 (устройство r25)1, а ещё четыре корня Entrust есть в исходном бандле (код r25)35. С бандлом только из него TLS не завершил ни один из 19: все 17 успешных хостов получили errno 60 (устройство r25)36. Зависимости от этого корня у этих 17 хостов в прогоне не видно: они проходят без него (устройство r25)1 и не проходят с ним одним (устройство r25)36.

Два исключения ведут себя по-разному. www.ssl.com падает уже сейчас, с тем же errno 60 «self signed certificate in certificate chain» во всех трёх режимах с проверкой; без проверки он отвечает HTTP 200, а его цепочка заканчивается самоподписанным SSL.com TLS RSA Root CA 2022 (устройство r25)2. Этого сертификата в бандле r25 нет, хотя четыре других корня SSL.com там есть (код r25)37. kodikapi.com получил errno 35 во всех четырёх режимах, включая выключенную проверку, причина не установлена (устройство r25)38, так что о его зависимости от корня прогон ничего не говорит. Сказанное относится к этим 19 хостам на эту дату, а не ко всем сайтам.

Что ожидалось. Ожидание — только по смыслу: актуальный набор корней.

Как проверить из плагина. Счётчику validTo_time_t из openssl_x509_parse() на r25 (device) верить нельзя: у сертификатов со сроком позже 2038-01-19 03:14:07 UTC (57 из 143) он равен −1, более ранние сроки переводятся верно (устройство r25)39. Поэтому наивное сравнение validTo_time_t < time() дало 62 «истёкших» (устройство r25)40; PHP там 32-битный (устройство r25)41. Сроки отдельных корней — в claims выше (код r22, r24, r25)28.

Обход в плагине. В claims не найден. Без проверки TLS www.ssl.com отвечает HTTP 200 (устройство r25)2, но это отказ от проверки (см. BUG-003), а kodikapi.com так не отвечает (устройство r25)38. Сайты вне списка, поведение после 2026-11-27 и свой бандл как обход — в «Не проверено».

BUG-003. HD::http_get_document отключает проверку TLS по умолчанию

Класс: безопасность. Компонент: dunelib/utils.php, HD::http_get_document. Где: tv188b r24 и r25, code.

Что происходит. Хелпер прошивки по умолчанию ставит CURLOPT_SSL_VERIFYPEER=false и следует редиректам; опции вызывающего применяются поверх (код r24)42. Плагин, который зовёт хелпер без своих опций, ходит по HTTPS без проверки сертификата (код r24)42. В r25 false по умолчанию ставят и HD::http_get_document(), и HD::http_server_responding() (код r25)43; у второго опций для переопределения нет (код r25)43.

Что ожидалось. Ожидание — только по смыслу: проверка включена по умолчанию.

Обход в плагине. Передать CURLOPT_SSL_VERIFYPEER=true: тогда для https-URL хелпер сам подставит CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt (код r24)31 — с устаревшим бандлом из BUG-001. В r25 так же; переданный в $opts свой CURLOPT_CAINFO при этом перезаписывается бандлом прошивки (код r25)44. Проверка сертификатов с этими опциями на устройстве не снималась (код r25)44.

BUG-004. Тайм-аут handle_user_input по умолчанию 60 с, а не 10 с

Класс: поведение против SDK. Компонент: исполнитель операций плагина в оболочке. Где: tv188b r25, device.

Что происходит. Операция handle_user_input PHP-плагина без operation_timeout в манифесте стартует с «start (timeout=60.0s)» (устройство r25)45. В одной проверке (один прогон) get_folder_view плагина без элемента operation_timeout оболочка отменила по тайм-ауту 60 с, а get_regular_folder_items того же плагина за 75 с не отменила (устройство r25)46; в коде r25 конструктор записывает в поле общего тайм-аута 60 с (код r25)47, подробности — plugin-operations.md §2.4.

Что ожидалось. По SDK тайм-аут операций по умолчанию — 10 с (SDK)48.

Как воспроизвести. Тестовый плагин test_plugin5 без operation_timeout в манифесте, ENTER на точке входа с plugin_handle_user_input (устройство r25)45.

Обход в плагине. Задать тайм-аут явно: ключи манифеста operation_timeout/default и operation_timeout/<тип операции> на r25 работают, в секундах (устройство r25)49.

BUG-005. operation_timeout: секунды в манифесте, миллисекунды в данных действия

Класс: документация SDK (одно имя ключа — разные единицы, данные действия в SDK не описаны). Компонент: действие plugin_handle_user_input, манифест. Где: tv188b r24 (code), r25 (device).

Что происходит. В коде r24 положительное operation_timeout в данных действия plugin_handle_user_input задаёт миллисекунды, а operation_timeout манифеста — секунды (код r24)50. На r25 (device) так и есть: в действии 3000 дало «timeout=3.0s», 3 — «timeout=0.0s» и отмену через 0,36 с, а значение из действия перекрывает манифест (устройство r25)51; в манифесте <default>5</default> дало 5 с (устройство r25)49.

Что ожидалось. SDK: у PluginHandleUserInputAction нет данных (SDK)52. Прошивка при этом объявляет PluginHandleUserInputActionData с operation_timeout, show_dialog_delay, dialog_title (код r24)53, а ActionFactory::handle_user_input пишет operation_timeout из параметра timeout_ms (r24 (код r24)54, r25 (код r25)55). Одноимённый ключ манифеста при этом — в секундах (код r24)50.

Обход в плагине. В данных действия задавать миллисекунды (устройство r25)51.

BUG-006. launch_ext_app с delay ≤ 0: error_action поверх открытого приложения

Класс: прошивка (гонка). Компонент: действие launch_ext_app, запуск приложений поставщиком «Фильмов». Где: tv188b r25, device и code.

Что происходит. По коду r25 ожидание потери фокуса при delay < 1 сразу кончается «wait for shell app loosing focus timed-out» и результатом 0, если оболочка ещё в фокусе (код r25)56. На r25 (device) с delay 0 приложение открылось («activity launch status: 0», Displayed), и поверх него выполнился error_action действия (устройство r25)57; в серии из четырёх запусков с delay 0 так было один раз (устройство r25)58. Без wait_app_start_delay у поставщика shell_ext передаёт delay −1, а error_action — показ errmsg_failed_to_start_playback (код r25)59.

Что ожидалось. Ожидание — только по смыслу: успешный запуск не должен показывать ошибку.

Как воспроизвести. Две проверки на устройстве: launch_ext_app с am start настроек и delay 0 (устройство r25)60.

Обход в плагине. delay > 0: с delay 10 ошибки не было (устройство r25)61; в r24 встроенный generic отдаёт wait_app_start_delay 10 (код r24)62. С delay −1 на r25 ошибки не было ни разу из пяти (устройство r25)63, но по коду это та же ветка, что и 0 (код r25)56.

BUG-007. playback_going_to_switch в конце последней серии

Класс: поведение против SDK. Компонент: события VOD-воспроизведения плагина. Где: tv188b r25, device.

Что происходит. Событие playback_going_to_switch приходит и в конце последней серии VOD, когда перехода на новый URL нет и плеер закрывается, — после состояния stopped и прямо перед playback_stop с playback_end_of_stream=1 (устройство r25)64.

Что ожидалось. SDK: с прошивки 150529 событие генерируется перед переключением на новый media URL и, в отличие от GUI_EVENT_PLAYBACK_STOP, не генерируется при остановке и выключении (SDK)65.

Как воспроизвести. VOD из нескольких серий, досмотреть последнюю (проверка на устройстве, files/63-vod2.txt) (устройство r25)64.

Обход в плагине. В claims не найден.

BUG-008. .platform.* на Android: установщик делает обратное тексту SDK

Класс: поведение против SDK. Компонент: установщик плагинов (ZIP). Где: tv188b r25, device.

Что происходит. Штатный установщик r25 применил к корню плагина .platform.android, затем поверх — .platform.android-arm-api19 (устройство r25)66; .platform.87xx не применил и удалил все каталоги .platform.* (устройство r25)67.

Что ожидалось. Текст SDK буквально говорит: на Android .platform.android удаляется, а .platform.87xx переносится в корень (SDK)68. Какая из сторон ошибочна — текст SDK или установщик, — в «Не проверено».

Как воспроизвести. Пакет с каталогами .platform.android, .platform.android-arm-api19, .platform.87xx, .platform.foo и маркерами в них (файл 90-plat-install.txt) (устройство r25)69.

Обход в плагине. На r25 Android-файлы класть в .platform.android или .platform.android-arm-api19 (второй применяется поверх первого) (устройство r25)66.

BUG-009. IP Control open_path не запускает точку входа плагина

Класс: поведение против SDK (документ IP Control). Компонент: IP Control. Где: tv188b r25, device.

Что происходит. cmd=open_path&url=root://applications/<подпись пункта> отвечает command_status=ok, но точку входа плагина не запускает (устройство r25)70.

Что ожидалось. Документ IP Control: протокол 4 добавил open_path для открытия папки, раздела меню или запуска пункта по root://…, с примером root://applications/RadioTime (SDK)71.

Обход в плагине. launch_media_url с plugin_launcher://{name=<плагин>} {ep_media_url=<media_url точки входа>} её запускает (устройство r25)70.

BUG-010. Путь adb push /flashdata/plugins/ из SDK на r25 не существует

Класс: поведение против SDK. Компонент: развёртывание плагина на Android. Где: tv188b r25, device.

Что происходит. В корне ФС каталога /flashdata нет, а оболочка называет каталог плагинов /flashdata/plugins; файлы этих плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins (устройство r25)72.

Что ожидалось. SDK для Android приводит команды adb push в /flashdata/plugins/ и chmod -R +x для bin и www/cgi-bin (SDK)73.

Обход в плагине. Класть плагин в /data/data/com.dunehd.app/flashdata/plugins; на r25 он регистрируется после am force-stop com.dunehd.app (устройство r25)74. Перечитывание по IP Control из SDK — в «Не проверено».

BUG-011. Ошибка movie_suppliers_update.sh не приводит к повтору

Класс: прошивка (код противоречит собственной обработке ошибки). Компонент: shell_ext, async_worker.php. Где: tv188b r24 (code), r25 (device, code).

Что происходит. В r24 код возврата movie_suppliers_update.sh только логируется («E: command failed with status»), а movie_suppliers_params.txt записывается и при ошибке, поэтому повторного запуска нет до смены версии или списка id (код r24)75. В r25 params-файл пишется сразу после system(), до проверки кода возврата, а описатели копируются независимо от него (код r25)76. На r25 (device) при коде выхода 3 params всё равно записан (устройство r25)77.

Что ожидалось. Ожидание — только по смыслу: код сам называет ненулевой код ошибкой (код r24)75, но ведёт себя как при успехе.

Обход в плагине. Повтор — только после смены версии или списка id (код r24)75.

BUG-012. $FS_PREFIX в shell_exec подставляется непоследовательно

Класс: прошивка (код противоречит соседнему коду). Компонент: встроенный PHP, перепись путей в командах. Где: tv188b r25 (device), APK r24 (code).

Что происходит. На r25 shell_exec добавляет $FS_PREFIX к словам /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в одинарных кавычках, но не к пути в двойных кавычках (устройство r25)78. По коду APK r24 путь проверяется, только если перед / стоит пробел, !, &, апостроф, скобка, ;, <, > или обратная кавычка; после ", =, |, : и табуляции он не переписывается (код r24)79. Корни сравниваются как префикс без границы каталога, поэтому проверку проходят и /firmware_ext/…, /tmpX, /config2/… (код r24)80.

Что ожидалось. Ожидание — только по смыслу: один и тот же путь получает префикс независимо от кавычек.

Обход в плагине. Путь в одинарных кавычках префикс на r25 получает (устройство r25)78.

BUG-013. Чёрный главный экран после cmd=main_screen во время операции плагина

Класс: прошивка (зависание интерфейса). Компонент: оболочка, IP Control. Где: tv188b r25, device.

Что происходит. После cmd=main_screen во время операции плагина главный экран оболочки был чёрным; вернул его только keyevent HOME; причина не установлена (устройство r25)81.

Что ожидалось. Ожидание — только по смыслу.

Как воспроизвести. Проверка на устройстве, сценарий C2 (устройство r25)81.

Обход в плагине. Не найден.

BUG-038. fs_ctl scandir с ошибкой пишет в output_path синтаксически неверный JSON

Класс: прошивка (код противоречит соседнему коду: успешная ветвь пишет поле, ошибочная — объект без имени поля). Компонент: действие fs_ctl, сериализатор результата (0x004972a4). Где: tv188b r25: код — code; файл результата scandir — device (две проверки на устройстве), get_file — device (одна проверка), по одному прогону.

Что происходит. В коде r25 при непустом output_path и команде scandir со статусом не 0 сериализатор после внешнего объекта и поля input пишет объект ошибки без предварительного имени поля (код r25)82; для get_file с ошибкой код устроен так же, а успешная ветвь вместо этого объекта пишет поле output (код r25)83. В одной проверке на tv188b r25 fs_ctl scandir несуществующего /tmp/test_plugin11/no_such записал в файл output_path синтаксически неверный JSON вида {"input":{...},{"error":{...}}} (устройство r25)84. Файл успешного scandir существующего каталога в том же прогоне содержит объект input и output.names (устройство r25)85. В другой проверке ошибочные scandir и get_file с непустым output_path записали такой же невалидный JSON, по одному прогону на команду (устройство r25)86.

Что ожидалось. Ожидание — только по смыслу: в файле — разбираемый JSON, как у успешной команды.

Важность: средняя. Контракт нарушен, последствия ограничены ошибочной командой: плагин, который разбирает файл результата, получает ошибку разбора вместо объекта error (устройство r25)84.

Как воспроизвести. Одна проверка: fs_ctl с scandir несуществующего каталога и непустым output_path (устройство r25)84; другая (отчёт files/71-k-fsctl.txt): ошибочные scandir и get_file (устройство r25)86.

Обход в плагине. Как обход в claims не записан. В том же прогоне продолжение post_action получило action_status="0" и fs_ctl_error="scandir failed" (устройство r25)87: исход команды виден по этим полям без разбора файла.

5. Записи: низкая важность, прошивка

BUG-014. httpd: 302 на каталог плагина ведёт на 404

Класс: прошивка. Компонент: httpd. Где: tv188b r25, device.

На URL каталога плагина без «/» (/plugins/<p>, /cgi-bin/plugins/<p>) httpd отвечает 302 с Location на тот же путь со «/», а на URL со «/» — 404 (устройство r25)88: редирект ведёт на ответ 404. «/» после имени файла тоже даёт 404 и для CGI, и для статики (устройство r25)89. Ожидание — только по смыслу. Обход: обращаться к файлам по полному имени без «/» в конце (устройство r25)89.

BUG-015. httpd отдаёт .mkv с Content-type: text/html

Класс: прошивка. Компонент: httpd, статика www плагина. Где: tv188b r25, device.

.mkv из www плагина отдаётся с Content-type: text/html (206 на GET с Range), а на HEAD — без Content-type; .txt отдаётся с text/plain (устройство r25)90. Ожидание — только по смыслу. Обход не найден.

BUG-016. media_check вызывает несуществующий /firmware/scripts/ffmpeg.sh

Класс: прошивка (ссылка на несуществующий файл). Компонент: shell_ext/bin/media_check. Где: tv188b r25, device; файл в образах r24 и r25 — code.

media_check вызывает /firmware/scripts/ffmpeg.sh, которого на устройстве нет: «No such file or directory», «ffmpeg finished with status 1» (устройство r25)91. В образах r24 и r25 при этом есть одинаковый файл system/system/dunehd/firmware/scripts/ffmpeg.sh размером 457 байт (код r24, r25)92; как этот путь образа отображается на /firmware устройства, не проверялось (код r24, r25)92.

В одной проверке из adb shell запуск sh $P/firmware/scripts/ffmpeg.sh -version напечатал ffmpeg not found (устройство r25)93; команда не передавала скрипту FS_PREFIX, так что это результат окружения adb, а не вызова из php_server (устройство r25)93. Прямой запуск $P/firmware/bin/ffmpeg -version с LD_LIBRARY_PATH=$P/lib:/system/dunehd/firmware/lib вывел ffmpeg version 7.1.3; ffmpeg — ссылка на $P/lib/libxxx_ffmpeg.so (устройство r25)94. Ожидание — только по смыслу. Обход не найден: работает ли скрипт с FS_PREFIX, не проверялось (устройство r25)94.

BUG-017. Метки времени в логах на 3 часа меньше местного времени

Класс: прошивка. Компонент: /tmp/run/<плагин>.log, shell.log. Где: tv188b r25, device.

Вызов, который date() в php_server записал как 13:38:00, в логе плагина помечен 10:38:00.049; метки shell.log — так же (устройство r25)95. Ожидание — только по смыслу. Обход: сопоставляя логи, учитывать сдвиг (устройство r25)95.

BUG-018. MainVod теряет hls_ignore_chunk_errors на не-Android

Класс: прошивка (параметр теряется). Компонент: встроенный ktv_start, main_vod.php. Где: tv188b r25, code.

В MainVod::do_get_vod_stream_info URL собирается с hls_ignore_chunk_errors:0, но при !HD::is_android() второй append_dune_param снова получает исходный $opts->stream_url, и параметр теряется; в MainEntryHandler::play_movie_stream второй вызов получает уже дополненный URL, и оба параметра сохраняются (код r25)96. Ожидание — соседний код той же сборки (код r25)96.

BUG-019. apiHttpPost и SettingsWrite клиента TorrServer возвращают true при неудаче

Класс: прошивка (true при неудаче). Компонент: downloads/ext/TorrServer.php. Где: tv188b r25, code.

Без ожидаемого JSON-ответа apiHttpPost возвращает true даже после false от file_get_contents, а SettingsWrite безусловно возвращает true (код r25)97. Ожидание — только по смыслу.

BUG-020. HD::get_item — заглушка

Класс: прошивка (функция-заглушка). Компонент: dunelib/utils.php. Где: tv188b r24, code.

HD::get_item($path, $dummy=null) всегда возвращает false (код r24)98. Ожидание — только по смыслу. Обход: не полагаться на этот метод.

BUG-021. AppShortcuts::static_init вызывается с другим числом аргументов

Класс: прошивка (код противоречит соседнему коду). Компонент: shell_ext, android_apps. Где: tv188b r25, code.

AppShortcuts::static_init объявлен с параметрами product и lang; shell_ext вызывает его с android_platform, product, lang, а MainPlugin android_apps — с product, lang (код r25)99. Эффект на устройстве не проверялся.

BUG-022. PluginFolderRows::$rows при константе rows

Класс: прошивка (код противоречит объявлению). Компонент: MovieListScreen::get_rows. Где: tv188b r25, code.

В ветке MovieListScreen::get_rows при to_ndx==0 написано PluginFolderRows::$rows, хотя dune_api.php объявляет rows как const (код r25)100. Эффект на устройстве не проверялся.

BUG-023. $movie без присваивания в normal_play

Класс: прошивка. Компонент: shell_ext, экран фильма. Где: tv188b r25, code.

В normal_play при info_tag с двоеточием и без CONTINUE_MODE сравнивается $movie->id, а локального присваивания $movie в функции нет (код r25)101. Работоспособность переключения OSD claim не утверждает (код r25)101.

BUG-024. no_transition и no_animation теряются при вставке строк GComps

Класс: прошивка (параметр теряется). Компонент: shell_ext, gcomp-list. Где: tv188b r24, code.

Помощник add_insert_actions получает только no_transition, а no_animation из handle_op ему не передаётся (код r24)102; изменение родительской панели при вставке всегда идёт с GCOMP_TRANSITION_DEFAULT, в том числе при no_transition (код r24)103.

BUG-025. get_epfs_params_path игнорирует $tmp

Класс: прошивка (параметр теряется). Компонент: shell_ext/lib, AbstractEpfsHandler. Где: tv188b r25, code.

AbstractEpfsHandler::get_epfs_params_path($tmp, $id='main') игнорирует аргумент $tmp и всегда возвращает <dir_path>/<id>_params (код r25)104.

BUG-026. stop.php пишет «10 sec» при ожидании 20 с

Класс: прошивка (косметика). Компонент: shell_ext, stop.php. Где: tv188b r24, code.

Сообщение о тайм-ауте говорит «for 10 sec», хотя ожидание ограничено $max_wait_sec = 20 (код r24)105.

BUG-037. Тип маркера recap: натив сравнивает со строкой с обратной кавычкой

Класс: прошивка (код противоречит соседнему коду). Компонент: libduneshell.so, конвертер StreamMarkerType (0x001a6e1c). Где: tv188b r25: константа и конвертер — code; тип маркера в shell.log и текст кнопки на OSD — device, один прогон (проверка на устройстве).

Что в коде. dune_api.php r25 задаёт STREAM_MARKER_RECAP='recap' (код r25)106. Нативный конвертер StreamMarkerType той же сборки возвращает 0 для 'intro', 1 для 'recap`' с завершающей обратной кавычкой, 2 для 'closing_credits', -1 для остальных строк и NULL (код r25)107. Константа и таблица конвертера расходятся, claims связаны conflicts_with (код r25)108.

Что видно на устройстве. При проверке на tv188b r25 (один прогон; в каждом запуске — единственный маркер from=3, to=15 без duration) поданы три значения type:

type маркера shell.log Кнопка на OSD через 5 с Claims
intro (контроль) markers_osd_markers I: type intro activated for 7s «Пропустить заставку» (устройство r25)109
recap markers_osd_markers I: type intro activated for 7s «Пропустить заставку», та же, что у intro (устройство r25)110
recap` с обратной кавычкой markers_osd_markers I: type recap activated for 7s «Пропустить вступление» (устройство r25)111

Маркер со строкой recap — значением константы STREAM_MARKER_RECAP в dune_api.php r25 (код r25)106 — показал пользователю кнопку заставки, как intro (устройство r25)112; кнопку «Пропустить вступление» из трёх поданных значений дала только строка с обратной кавычкой (устройство r25)113. Ту же кнопку «Пропустить заставку» у intro показал и проверка на устройстве (устройство r25)114. Действие кнопки не проверялось: ENTER на ней при проверке на устройстве не нажимался (устройство r25)111.

Что ожидалось. Ожидание — константа той же сборки (код r25)106; что маркер с ней даёт тип recap и кнопку вступления, — по смыслу.

Важность: низкая. Видимый эффект — текст кнопки на OSD (косметика по §1); действие кнопки и другие типы не проверялись. Как recap превращается в type intro, closing_credits и годится ли recap` как обход — в «Не проверено». Обход в claims не найден.

6. Записи: низкая важность, документация SDK

BUG-027. restart_gui описан как перезагрузка приставки

Класс: документация SDK. Компонент: ChangeSettingsAction. Где: SDK (doc); tv188b r25 (device).

В SDK описание restart_gui дословно то же, что у reboot: «whether to reboot STB immediately» (SDK)115. На r25 restart_gui=true при reboot=false и пустых settings перезапускает приложение Dune, а не приставку (устройство r25)116.

BUG-028. buffering_ms не реализован по SDK, а r25 его применяет

Класс: документация SDK. Компонент: PluginVodInfo::buffering_ms. Где: SDK (doc); tv188b r25 (device).

SDK: PluginVodInfo::buffering_ms не реализован (SDK)117. На r25 при buffering_ms=3000 оболочка пишет «setting buffering to 3000ms» и «using special buffering 3000ms» (устройство r25)118.

BUG-029. Имя параметра get_vod_stream_url

Класс: документация SDK (противоречит сама себе). Компонент: DunePlugin::get_vod_stream_url. Где: SDK (doc); tv188b r25 (device).

В объявлении интерфейса параметр — $media_url, в обзоре — $playback_url (SDK)119; в описании операции — тоже $playback_url (SDK)120. На r25 в input_data приходит ключ media_url (устройство r25)121.

BUG-030. Тип результата change_tv_favorites()

Класс: документация SDK (противоречит сама себе). Компонент: DunePlugin::change_tv_favorites. Где: SDK (doc); tv188b r24 (code).

В описании операции change_tv_favorites() возвращает GuiAction (SDK)122, а в объявлении интерфейса DunePlugin — void (SDK)123. В dune_api.php r24 по комментариям — GuiAction (код r24)124.

BUG-031. archive_past_days против archive_past_sec

Класс: документация SDK (противоречит сама себе). Компонент: PluginTvChannel. Где: SDK, doc.

Раздел об архиве называет archive_past_days с умолчанием 14 дней (SDK)125, а объявление PluginTvChannel задаёт глубину полем archive_past_sec, поля archive_past_days в нём нет (SDK)126.

BUG-032. 'protected' из get_tv_playback_url или get_tv_stream_url

Класс: документация SDK (противоречит сама себе). Компонент: ТВ плагина, защищённые каналы. Где: SDK, doc.

Одно место: для каналов с is_protected = true при custom_protect_code_handling диалог кода показывается, если get_tv_playback_url() вернул 'protected' (SDK)127. Другое: у защищённого канала (is_protected = true, playback_url_is_stream_url = false) protect_code кодируется в playback_url, а 'protected' возвращает get_tv_stream_url() (SDK)128.

BUG-033. Тип движка: только php или ещё plain

Класс: документация SDK (противоречит сама себе). Компонент: манифест, dune_plugin->type. Где: SDK, doc.

Раздел манифеста говорит, что поддерживается только тип php (SDK)129, а другое место допускает plain для чистых FlashLite/HTML-плагинов с 120531_2200_beta (SDK)130.

BUG-034. Тип series_media_url — Boolean

Класс: документация SDK. Компонент: PluginMovieFolderView. Где: SDK (doc); tv188b r24 (code).

В объявлении SDK series_media_url имеет тип Boolean, хотя по описанию это media_url папки (SDK)131; в комментариях dune_api.php r24 — (char *) (код r24)132.

BUG-035. Имя класса данных PluginUpdateFolderAction

Класс: документация SDK. Компонент: данные PluginUpdateFolderAction. Где: SDK (doc); tv188b r24 (code).

SDK называет класс данных PluginUpdateFolderAction, без суффикса ActionData (SDK)133; dune_api.php r24 определяет PluginUpdateFolderActionData с теми же ключами range, need_refresh, sel_ndx (код r24)134.

BUG-036. Версия появления global plugin actions

Класс: документация SDK (противоречит сама себе). Компонент: манифест, global_actions. Где: SDK, doc.

Заголовок раздела «Global plugin actions» указывает прошивку 130315_b6 (SDK)135, а текст того же раздела — 130515_2104_b6 (SDK)136.

7. Не проверено

Ошибки ниже держатся на inference или disputed, на признаках из плагинов-обходов или на вопросе, который в базе не решён. Писать о них разработчикам Dune можно только как о вопросе.

Что Основа Чего не хватает
CA-бандл (BUG-001): зависят ли сайты вне hosts10.txt от корня Entrust Root Certification Authority или уже истёкших корней сроки Entrust — (код r22, r24, r25)28, истёкшие корни — (код r22, r24, r25)137; прогон охватил только 19 хостов (устройство r25)34 в базе нет данных о других сайтах и о том, каких ещё современных корней нет в бандле; прогон убирал из бандла только один сертификат (устройство r25)1, зависимость от остальных не проверялась; файл доступен из php_server и php-cgi (устройство r25)33, но HTTPS из php-cgi и на других сборках с тем же бандлом не проверялся
CA-бандл (BUG-001): HTTPS после 2026-11-27 истечение корня Entrust не должно изменить результат для хостов hosts10.txt из php_server, опора — 17 успешных хостов (вывод r25)138 (inference) повторить проверку на устройстве после 2026-11-27 и сравнить столбец full с files/42-tls.txt; отдельно проверить сайты вне hosts10.txt
CA-бандл (BUG-001): учитывает ли PHP cURL в php_server r25 CURLOPT_CAINFO, а не только системное хранилище вывод из разницы между полным бандлом и бандлом только из корня Entrust (вывод r25)139 (inference) повторить с заведомо неверным CURLOPT_CAINFO и без этой опции; свой бандл с недостающим корнем как обход в базе не проверялся
CA-бандл (BUG-001): почему kodikapi.com получает errno 35 errno 35 во всех четырёх режимах, причина не установлена (устройство r25)38 причина сбоя и цепочка этого хоста
curl_multi (BUG-002): почему php_server падает в zif_curl_multi_getcontent+116 вероятная причина — несогласованное использование поля handle+0x16c в r25: сохранённый URL может интерпретироваться как указатель на структуру буфера (вывод r25)140 (inference, disputed); при проверке на устройстве регистр r3 в момент падения — байты ASCII «http», а fault addr = r3 + 0x28, что с гипотезой согласуется (вывод r25)141 (inference) поле +0x16c лог не показывает (вывод r25)140; какое поле читает функция на +116, — проверка по листингу zif_curl_multi_getcontent; причинность требует трассы (вывод r25)140; падает ли curl_multi_getcontent с одним хендлом, в базе нет данных
маркер типа recap (BUG-037): почему recap даёт type intro по трём маркерам проверки на устройстве конечный тип на OSD согласуется с таблицей конвертера для intro и recap`, а recap, для которого конвертер по коду возвращает -1, дал type intro (вывод r25)142 (inference) closing_credits, другие строки и NULL не подавались, прямых кодов возврата конвертера нет (вывод r25)142; лог не печатает значения PHP-констант, поэтому значение STREAM_MARKER_RECAP на устройстве не снято (подавалась строка recap); что натив делает с результатом -1, не разобрано: промежуточная обработка ошибки не доказана (устройство r25)143; действие кнопки не проверено: ENTER на ней не нажимался (устройство r25)144; годится ли recap` как обход, не проверялось
кандидат: пустой ответ get_folder_rows или ряд снова как loading (ld) — непрерывный повтор без паузы (r25) при проверке на устройстве (tv188b 261021_0117_r25, один прогон) на пустой ответ get_folder_rows за ~45 с пришло 7977 вызовов, повторы шли до уборки случая (устройство r25)145; на неполный ответ — дозапрос ["r2"], затем ["r3"], 3 вызова, без повторов (устройство r25)146; по коду неполученные строки остаются LOADING и снова проходят фильтр (устройство r25)147. При проверке на устройстве (tv188b 261101_0347_r25, один прогон) ответ, где ряд r2 снова отдан row_dup с data "ld", как loading-ряд, дал 18602 вызова get_folder_rows за ~41 с, от ~190 до ~710 в секунду (устройство r25)148; row_regular с пустым items и row_vgap с тем же id повторов не дали — по 2 вызова за ~45 с (устройство r25)149 в базе нет данных, задумано ли это и есть ли в коде пауза или предел повторов; нагрузку на PHP-сервер плагина в базе не измеряли. Плагину — не возвращать пустой ответ и не отдавать запрошенный ряд снова loading-рядом; пустой ряд — row_regular с пустым items или row_vgap (plugin-operations.md §1.3)
кандидат: more_items_available=true при уже отданном total — бесконечные запросы порций (r25) при проверке на устройстве (tv188b 261101_0347_r25, один прогон) при initial_range 4 из 4 и more_items_available=true, когда тестовый плагин на каждый get_regular_folder_items(from=4) снова отдавал total 4, 2 пункта и more_items_available=true, оболочка повторяла запрос from=4 без конца: 19227 запросов порций за ~70 с, на экране 4 пункта (устройство r25)150; при проверке на устройстве (261021_0117_r25) на такой же запрос тестовый плагин ответил total=4 и more_items_available=false, и запрос был один (устройство r25)151 в базе нет данных о пределе повторов в коде и о том, задумано ли это; в прогоне противоречивый ответ плагина (more_items_available=true без новых пунктов за total) оболочка не отсекла (устройство r25)150. Плагину — на последней порции отдавать more_items_available=false
.platform.* (BUG-008): задумано ли поведение установщика, а ошибочен текст SDK гипотеза «задумано по аналогии с SMP87xx» (вывод)152 (inference) для r24 и других прошивок порядок не проверен
перечитывание плагинов по IP Control (cmd=main_screen, затем ANGLE) SDK (SDK)153 (disputed); на r25 новые плагины не подхватились (устройство r25)74 SDK-сторона ослаблена верификатором
точка входа без icon_url на r25 не регистрируется, хотя SDK описывает icon_url как параметр отображения SDK (SDK)154 (disputed); r25: launch_capable 0 без icon_url (устройство r25)155, в «Приложениях» не видна (устройство r25)156 SDK-сторона ослаблена; icon_id не проверялся
порядок действия на GUI_EVENT_PLAYBACK_STOP SDK: пауза, действие, ожидание завершения цепочки, потом остановка (SDK)157 (disputed); r25: действие после STOPPED (устройство r25)158 SDK-сторона ослаблена
клавиши в VOD: SDK противоречит сам себе перечислены только цветные, список не назван исчерпывающим (SDK)159; все ранее перечисленные клавиши с 131029_b9 (SDK)160 — все disputed; r25: нецветные доставляются (устройство r25)161 все три SDK-claim ослаблены
путь resume_state.properties SDK: /config/resume_state.properties (SDK)162 (disputed); r25: файл в $FS_PREFIX/config (устройство r25)163 SDK-сторона ослаблена; ошибка ли это или особенность Android-прошивки, не решено
stream_special всегда играет первый файл код выбирает файл с минимальным count($file->path) с «FIXME» (код r24)164; вывод о первом файле (вывод r24)165 (disputed) проверка на устройстве
run_async_worker.sh не удаляет старые флаги rm -f "$apidir/wake_flag $apidir/stop_flag" (код r24)166; следствие — оставшийся stop_flag останавливает воркер (вывод r24)167 (inference) проверка на устройстве
curl_client.php теряет параметры авторизации результат str_replace не присваивается $url (вывод r24)168 (inference) чтение кода верификатором
kill_old_instance не доходит до SIGKILL (вывод r25)169 (inference) чтение кода верификатором
get_archive зацикливается на строке без пробела (вывод r25)170 (inference) чтение кода верификатором
перепись FS_PREFIX читает байт до начала строки команды (вывод r24)171 (inference) разбор нативного кода верификатором
shell_ext/bin/curl собран для MIPS и на tv188b не запускается (вывод r24)172 (inference) проверка на устройстве
init.sh грузит модули .ko, которых в прошивке нет каталога firmware/kernel/ нет (код r24)173, boot.sh/init.sh без бита исполнения (код r22, r24)174; что скрипты не вызываются — (вывод r24)175 (disputed) если скрипты — наследие и не вызываются, ошибки для плагинов нет
ссылки php.ini и .do_config.php.swp на run_plugin_cgi в /tmp/www/cgi-bin/plugins/<p>/ (устройство r25)176 что отдаёт HTTP-запрос к такой ссылке, не проверялось; что файл уйдёт в sh — вывод из note claim
сравнение версий fwv_ge/gt/le/lt через strcmp (код r24)177 ошибка ли это, зависит от формата версий; в базе не установлено
is_dir на SMB-путях на SMP8672/8673/8758 плагины проверяют каталог /tmp/mnt/smb/ через shell test -d вместо is_dir(): (код)178; копии get_bug_platform_kind() расходятся в списке платформ (код)179 claim прошивки нет; Sigma-прошивки в базе не разобраны по этому вопросу
символы, которые прошивка не показывает (get_repl_mips_bug) altSource заменяет emoji, обратный слэш и полноширинные ASCII на * (код)180 claim прошивки нет
change_tv_favorites() возвращает NULL при успехе комментарии в библиотеках плагинов (код)181 claim прошивки нет; тип результата в SDK противоречив (BUG-030)

  1. fw-tv188b-261021-0117-r25--libphp5.c047 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) с бандлом без сертификата «Entrust Root Certification Authority» при включённой проверке TLS те же 17 из 19 хостов hosts10.txt получили errno 0; исключения те же — www.ssl.com (60) и kodikapi.com (35). ↩↩↩↩

  2. 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. ↩↩↩↩↩

  3. 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»; повторный запуск дал то же самое. ↩↩

  4. 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.». ↩

  5. 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; после закрытия плеер не завис. ↩

  6. 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. ↩

  7. 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)=нет. ↩

  8. 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; каждый вызов имеет метки до и после. ↩

  9. 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», без последующей метки этого вызова. ↩↩

  10. 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 тестового плагина уже не найден. ↩

  11. 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.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.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»; повторный запуск дал то же самое.

    ↩

  12. 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 записан (один прогон). ↩↩

  13. 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 тестового плагина после шага не было (один прогон). ↩

  14. 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 за случай записей нет (один прогон). ↩↩

  15. fw-tv188b-261021-0117-r25--libphp5.c011 · 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 · В strings libphp5.so пяти исследованных сборок присутствуют имена PHP cURL multi: curl_multi_init, curl_multi_add_handle, curl_multi_remove_handle, curl_multi_select, curl_multi_exec, curl_multi_getcontent, curl_multi_info_read, curl_multi_close. ↩

    • 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.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.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.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.c046 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) при CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt и включённой проверке TLS 17 из 19 хостов hosts10.txt получили errno 0; исключения — www.ssl.com (errno 60) и kodikapi.com (errno 35).
    • fw-tv188b-261021-0117-r25--libphp5.c047 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) с бандлом без сертификата «Entrust Root Certification Authority» при включённой проверке TLS те же 17 из 19 хостов hosts10.txt получили errno 0; исключения те же — www.ssl.com (60) и kodikapi.com (35).

    ↩

  16. 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. ↩

  17. 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 года. ↩

  18. fw-tv188b-261021-0117-r25--libphp5.c031 · code · android-dune-fw; прошивка 261021_0117_r25 · CA-бандл сборки fw-tv188b-261021-0117-r25 содержит 143 PEM-сертификата. ↩

  19. fw-tv188b-261021-0117-r25--libphp5.c038 · 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-бандле сертификат Staat der Nederlanden EV Root CA имеет notAfter 2022-12-08 11:10:28 UTC. ↩

  20. fw-tv188b-261021-0117-r25--libphp5.c039 · 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-бандле сертификат E-Tugra Certification Authority имеет notAfter 2023-03-03 12:09:48 UTC. ↩

  21. fw-tv188b-261021-0117-r25--libphp5.c040 · 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-бандле сертификат Hongkong Post Root CA 1 имеет notAfter 2023-05-15 04:52:29 UTC. ↩

  22. fw-tv188b-261021-0117-r25--libphp5.c041 · 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-бандле сертификат Security Communication RootCA1 имеет notAfter 2023-09-30 04:20:49 UTC. ↩

  23. fw-tv188b-261021-0117-r25--libphp5.c042 · 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-бандле сертификат Baltimore CyberTrust Root имеет notAfter 2025-05-12 23:59:00 UTC. ↩

  24. fw-tv188b-261021-0117-r25--libphp5.c043 · 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-бандле сертификат Entrust Root Certification Authority имеет notAfter 2026-11-27 20:53:42 UTC. ↩↩↩

  25. fw-tv188b-261021-0117-r25--libphp5.c044 · 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-бандле сертификат Certigna имеет notAfter 2027-06-29 15:13:05 UTC. ↩

  26. fw-tv188b-261021-0117-r25--libphp5.c045 · 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-бандле сертификат GlobalSign Root CA имеет notAfter 2028-01-28 12:00:00 UTC. ↩

  27. 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 ↩↩

  28. fw-tv188b-261021-0117-r25--builtin-plugins-misc.c018 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · StartApi::api_call ходит через HD::http_get_document/http_post_document с базовыми опциями CURLOPT_FOLLOWLOCATION=true, CURLOPT_SSL_VERIFYPEER=true и CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt, поверх которых применяются $add_opts; при plain_text возвращает тело без json_decode, иначе декодирует json_decode; при DuneCurlException с кодом 401–403 и заданным свойством $e->doc возвращает объект исключения, без doc бросает auth_failed; прочие ошибки пишет в last_api_error и возвращает null. ↩

  29. 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-блока сертификатов. ↩↩

  30. fw-tv188b-261021-0117-r25--libphp5.c046 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) при CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt и включённой проверке TLS 17 из 19 хостов hosts10.txt получили errno 0; исключения — www.ssl.com (errno 60) и kodikapi.com (errno 35). ↩↩

  31. fw-tv188b-261021-0117-r25--libphp5.c054 · code · android-dune-fw; прошивка 261021_0117_r25 · В ca-bundle.crt r25, кроме Entrust Root Certification Authority (c043), есть четыре других корня Entrust: Entrust.net Premium 2048 Secure Server CA (subject CN Entrust.net Certification Authority (2048)), Entrust Root Certification Authority - G2, Entrust Root Certification Authority - EC1 и Entrust Root Certification Authority - G4. ↩

  32. fw-tv188b-261021-0117-r25--libphp5.c048 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) с бандлом только из сертификата «Entrust Root Certification Authority» при включённой проверке TLS ни один из 19 хостов hosts10.txt не завершил TLS: 18 получили errno 60, kodikapi.com — errno 35; все 17 хостов, успешных с полным бандлом, получили errno 60. ↩↩

  33. fw-tv188b-261021-0117-r25--libphp5.c053 · code · android-dune-fw; прошивка 261021_0117_r25 · В ca-bundle.crt r25 есть четыре корня SSL.com — SSL.com Root Certification Authority RSA, SSL.com Root Certification Authority ECC, SSL.com EV Root Certification Authority RSA R2 и SSL.com EV Root Certification Authority ECC; сертификата SSL.com TLS RSA Root CA 2022 в бандле нет. ↩

  34. fw-tv188b-261021-0117-r25--libphp5.c051 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · kodikapi.com на tv188b r25 из php_server (uid 1000) во всех четырёх режимах (full, no_entrust, only_entrust, no_verify) получил errno 35 «OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to kodikapi.com:443» и HTTP 0; причина не установлена. ↩↩↩

  35. fw-tv188b-261021-0117-r25.c331 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и в php-cgi даёт validTo_time_t = -1 (gmdate — 1969-12-31 23:59:59) у всех сертификатов /firmware/certs/ca-bundle.crt со сроком позже 2038-01-19 03:14:07 UTC (57 из 143), а более ранние сроки переводит верно; 2147483647 (2038-01-19 03:14:07) — настоящий срок сертификата GlobalSign. ↩

  36. fw-tv188b-261021-0117-r25.c252 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и php-cgi по сертификатам /firmware/certs/ca-bundle.crt (143 PEM-блока) даёт validTo_time_t < time() у 62; наименьшее значение — 1969-12-31 (AffirmTrust Premium), наибольшее — 2038-01-19; ближайший будущий срок — 2026-11-27 (Entrust Root Certification Authority). ↩

  37. fw-tv188b-261021-0117-r25.c242 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP 32-битный по целым: в php_server и в php-cgi CGI плагина PHP_INT_SIZE = 4, PHP_INT_MAX = 2147483647. ↩

  38. 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_*; опции вызывающего применяются поверх ↩↩

  39. fw-tv188b-261021-0117-r25.c366 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 HD::http_get_document() и HD::http_server_responding() по умолчанию ставят CURLOPT_SSL_VERIFYPEER=false. ↩↩

  40. fw-tv188b-261021-0117-r25.c367 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 HD::http_get_document() добавляет CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt только если в $opts передан истинный CURLOPT_SSL_VERIFYPEER и URL начинается с https://, после чего применяет $opts к хендлу; вызывающий может включить проверку, но CAINFO принудительно становится бандлом прошивки (переданный в $opts CAINFO перезаписывается). ↩↩

  41. fw-tv188b-261021-0117-r25.c309 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 операция handle_user_input PHP-плагина без operation_timeout в манифесте (test_plugin5, test_plugin6; ENTER на точке входа с plugin_handle_user_input) стартует с тайм-аутом 60 с: в shell.log «…->handle_user_input(…): start (timeout=60.0s)». ↩↩

  42. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c046 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (один прогон) get_folder_view плагина без элемента operation_timeout в манифесте оболочка отменила по тайм-ауту 60 с (а не 10 с из SDK); get_regular_folder_items того же плагина, спавший 75 с, отменён не был. ↩

  43. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c024 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 конструктор структуры плагина (fcn.0028fc3c) обнуляет её и записывает в поле +0x2c значение 0x3c (60); это поле parse_plugin_manifest затем использует как общий тайм-аут операций в секундах. ↩

  44. doc-sdk-plugins.c042 · doc · any-documented; прошивка — · По SDK тайм-аут операций плагина по умолчанию составляет 10 секунд; operation_timeout задаёт общий () и потиповой (N) тайм-аут. ↩

  45. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c035 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ключи манифеста operation_timeout/default и operation_timeout/<тип операции> задаются в секундах и работают: 5 дало handle_user_input «start (timeout=5.0s)» и отмену на 5 с, 7 — «timeout=7.0s» и отмену на 7 с. ↩↩

  46. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 положительное operation_timeout в данных действия plugin_handle_user_input задаёт миллисекунды (перед исполнителем умножается на 1000), а operation_timeout из манифеста — секунды (plugin_get_operation_timeout_us умножает его на 1000000). ↩↩

  47. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c034 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ключ operation_timeout в данных действия plugin_handle_user_input задаётся в миллисекундах: 3000 дало «start (timeout=3.0s)» и отмену через 3,3 с, 3 — «timeout=0.0s» и отмену через 0,36 с, 60000 — «timeout=60.0s»; значение из данных действия перекрывает operation_timeout/default манифеста (5). ↩↩

  48. doc-sdk-plugins--gui-actions.c042 · doc · any-documented; прошивка — · PluginHandleUserInputAction не имеет данных; выполняет операцию Handle_user_input(GuiAction::$params) и возвращает её результат как post action ↩

  49. fw-tv188b-260827-0003-r24--php-framework.c206 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginHandleUserInputActionData с ключами (3): operation_timeout, show_dialog_delay, dialog_title ↩

  50. fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c209 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В ActionFactory::handle_user_input ветка isset(timeout_ms) записывает в data поле operation_timeout, приведённое к int. ↩

  51. fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c040 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · ActionFactory::handle_user_input при переданных timeout_ms или show_dialog_delay_ms записывает int-значения в operation_timeout или show_dialog_delay; при обоих null data остаётся null. ↩

  52. fw-tv188b-261021-0117-r25--app-launch.c062 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Ожидание потери фокуса fcn.00560a58(delay, метка) в tv188b r25 — если оболочка уже без фокуса, «%s: shell app is already lost focus» и результат 1; если delay < 1 — сразу «%s: wait for shell app loosing focus timed-out» и 0; иначе каждые 100 мс (usleep(100000)) проверяет фокус до delay секунд — потеря фокуса даёт «%s: shell app lost focus in %.2fs» и ненулевой результат, истечение срока — «timed-out» и 0. ↩↩

  53. fw-tv188b-261021-0117-r25--app-launch.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay 0 (am start настроек) дал «activity launch status: 0», через 4,968 мс — «general: wait for shell app loosing focus timed-out»; настройки открылись (Displayed +123ms), и поверх них выполнился error_action действия — диалог «KB7 error_action / delay=0». ↩

  54. fw-tv188b-261021-0117-r25--app-launch.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве в серии из четырёх запусков launch_ext_app с delay 0 все дали «activity launch status: 0», но ровно один (n=5) — через 1,488 мс «wait for shell app loosing focus timed-out» и show_error KB9 error_action; в остальных трёх — «already lost focus». В n=5 настройки открылись (Displayed +129ms). ↩

  55. fw-tv188b-261021-0117-r25--app-launch.c006 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Перед запуском shell_ext r25 пропускает bin поставщика через finalize_launch_cmd(cmd, package_name, src) и возвращает launch_ext_app с ensure_playback_stopped=true, delay=wait_app_start_delay (по умолчанию -1), package из ответа и error_action — показ errmsg_failed_to_start_playback. ↩

    • fw-tv188b-261021-0117-r25--app-launch.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay 0 (am start настроек) дал «activity launch status: 0», через 4,968 мс — «general: wait for shell app loosing focus timed-out»; настройки открылись (Displayed +123ms), и поверх них выполнился error_action действия — диалог «KB7 error_action / delay=0».
    • fw-tv188b-261021-0117-r25--app-launch.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве в серии из четырёх запусков launch_ext_app с delay 0 все дали «activity launch status: 0», но ровно один (n=5) — через 1,488 мс «wait for shell app loosing focus timed-out» и show_error KB9 error_action; в остальных трёх — «already lost focus». В n=5 настройки открылись (Displayed +129ms).

    ↩

  56. fw-tv188b-261021-0117-r25--app-launch.c080 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay 10 (am start настроек) дал activity launch status 0, через 5,243 мс — «general: shell app is already lost focus»; настройки открылись (Displayed +105ms), error_action не выполнялся. ↩

  57. fw-tv188b-260827-0003-r24--movie-suppliers.c061 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Нет пакета — generic отвечает error.missing_app (indirect true, urls http://online.dune-hd.com/apk/generic/.txt); иначе {bin, package, wait_app_start_delay 10, title, indirect true, urls} ↩

    • fw-tv188b-261021-0117-r25--app-launch.c079 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay −1 (am start настроек) дал activity launch status 0, через 3,419 мс — «general: shell app is already lost focus»; настройки открылись (resumed MainSettings), error_action не выполнялся.
    • fw-tv188b-261021-0117-r25--app-launch.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве все четыре запуска launch_ext_app с delay −1 в серии дали activity launch status 0 и «general: shell app is already lost focus», строк show_error не было; у n=2 интервал от статуса до сообщения — 6,953 мс, поэтому исторические 3–5 мс из req7 не являются постоянной границей.

    ↩

  58. fw-tv188b-261021-0117-r25.c283 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие playback_going_to_switch приходит и в конце последней серии VOD, когда перехода на новый URL нет и плеер закрывается — после состояния stopped и непосредственно перед playback_stop с playback_end_of_stream=1. ↩↩

  59. doc-sdk-plugins--gui-actions.c017 · doc · any-documented; прошивка — · С прошивки 150529 событие GUI_EVENT_PLAYBACK_GOING_TO_SWITCH генерируется перед переключением на новый media URL; в отличие от GUI_EVENT_PLAYBACK_STOP, оно не генерируется при остановке и выключении ↩

  60. fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.». ↩↩

  61. fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt. ↩

  62. doc-sdk-plugins.c137 · doc · android; прошивка — · Текст документа буквально говорит: при установке на Android содержимое .platform.android удаляется, а содержимое .platform.87xx переносится в корень ↩

    • fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.».
    • fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt.

    ↩

  63. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=open_path&url=root://applications/<подпись пункта> отвечает command_status=ok, но точку входа плагина не запускает (вызовов 0 → 0), а launch_media_url с plugin_launcher://{name=<плагин>} {ep_media_url=} её запускает (0 → 1). ↩↩

  64. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c040 · doc · any-documented; прошивка — · В описании IP Control указано, что протокол 4 добавил cmd=open_path&url=URL для открытия папки, раздела меню или запуска пункта по root://…; приведён пример root://applications/RadioTime. ↩

  65. fw-tv188b-261021-0117-r25.c207 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в корне ФС каталога /flashdata нет, а оболочка в shell.log называет каталог плагинов /flashdata/plugins («Loading plugins from '/flashdata/plugins'», «invalid plugin manifest from '/flashdata/plugins/test_plugin5_badname/dune_plugin.xml'», «copying recursively '/tmp/plugin_tmp' to '/flashdata/plugins/test_plugin5_plat'»); файлы этих плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins. ↩

  66. doc-sdk-plugins.c140 · doc · android; прошивка — · В SDK для Android приведены команды развёртывания плагина: adb push в /flashdata/plugins/ и chmod -R +x для bin и www/cgi-bin внутри каталога плагина. ↩

  67. fw-tv188b-261021-0117-r25.c203 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги плагинов, положенные adb push в /data/data/com.dunehd.app/flashdata/plugins, не подхватились перечитыванием по IP Control (cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00; обе команды ответили command_status ok): в shell.log после них нет ни строк test_plugin5, ни «Loading plugins from», ни populate_plugins, а test_plugin5 нет в /tmp/run/installed_plugins.xml. test_plugin5 и test_plugin5_sup зарегистрировались после am force-stop com.dunehd.app. ↩↩

  68. fw-tv188b-260827-0003-r24--movie-suppliers.c011 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Код возврата movie_suppliers_update.sh только логируется («E: command failed with status»); movie_suppliers_params.txt записывается и при ошибке, так что повторного запуска до смены версии или списка id нет ↩↩↩

  69. fw-tv188b-261021-0117-r25--shell-ext--search-tv.c045 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 params-файл плагина записывается сразу после system() до проверки кода возврата, а описатели копируются независимо от него; ненулевой код только логируется. Поэтому при ошибке скрипта плагин всё равно получает новый params и описатели, если они есть. ↩

  70. fw-tv188b-261021-0117-r25.c127 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при коде выхода 3 у movie_suppliers_update.sh оболочка всё равно записала movie_suppliers_params.txt («1:kbp6_app_n-…»). ↩

  71. fw-tv188b-261021-0117-r25.c253 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP (php_server и php-cgi CGI) в команде shell_exec добавляет $FS_PREFIX (/data/data/com.dunehd.app) к словам /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в одинарных кавычках ('/tmp/h'), но не к /etc/…, не к x/tmp/f и не к пути в двойных кавычках ("/tmp/g"). ↩↩

  72. fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c014 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_cmd ищет в команде символы '/' и проверяет путь, только если перед '/' стоит пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или обратная кавычка; после двойной кавычки, '=', '|', ':', табуляции и прочих символов путь не переписывается ↩

  73. fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c032 · code · android-atv; прошивка 260724_0207_r24 · Корни в _php_path_needs_prefix.part.0 сравниваются как префикс без проверки границы каталога: str_starts_with(path, s) возвращает результат strncmp(path, s, strlen(s)) == 0, поэтому проверку проходят и /firmware_ext/…, /tmpX, /config2/…, /flashdata_old/… ↩

  74. fw-tv188b-261021-0117-r25.c346 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после cmd=main_screen во время операции плагина (C2) главный экран оболочки был чёрным; вернул его только keyevent HOME; причина не установлена. ↩↩

  75. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts.c007 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В fs_ctl при непустом output_path и команде scandir со статусом не 0 сериализатор 0x004972a4 после внешнего объекта и поля input вызывает 0x0049720c без предварительного имени поля для его объекта. ↩

  76. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts.c008 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В fs_ctl при непустом output_path и команде get_file со статусом не 0 после внешнего объекта и input вызывается самостоятельный объект ошибки 0x0049720c без предварительного имени поля; успешная ветвь вместо него записывает поле output. ↩

  77. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts.c012 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве fs_ctl scandir несуществующего /tmp/test_plugin11/no_such записал в fs_bad.json синтаксически неверный JSON с анонимным объектом error после input: {"input":{...},{"error":{...}}}. ↩↩↩

  78. fw-tv188b-261021-0117-r25--php-framework--native-actions.c052 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве fs_ctl scandir(/tmp/test_plugin11) с output_path вернул post с action_status="1", fs_ctl_command=scandir, fs_ctl_output_path и fs_ctl_path; fs_ok.json содержит объект input и output.names. ↩

  79. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts.c009 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При ошибочном scandir/get_file и непустом output_path fs_ctl записывает невалидный JSON вида {"input":{...},{"error":{...}}}: перед самостоятельным объектом ошибки отсутствует имя поля (tv188b r25, по одному прогону на команду; последовательность сериализатора — по коду). ↩↩

  80. fw-tv188b-261021-0117-r25--php-framework--native-actions.c053 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве fs_ctl scandir(/tmp/test_plugin11/no_such) с output_path вернул post с action_status="0", fs_ctl_error="scandir failed", fs_ctl_command=scandir, fs_ctl_output_path и fs_ctl_path. ↩

  81. fw-tv188b-261021-0117-r25.c160 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd на URL каталога плагина без «/» в конце (/plugins/

    , /cgi-bin/plugins/

    ) отвечает 302 с Location на тот же путь со «/», а на URL со «/» (/plugins/

    /, /cgi-bin/plugins/

    /) — 404 Not Found. ↩

  82. fw-tv188b-261021-0117-r25.c161 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 «/» после имени файла плагина даёт 404 Not Found и для CGI (/cgi-bin/plugins/

    /ping.sh/), и для статики (/plugins/

    /index.txt/), хотя без «/» оба отвечают 200. ↩↩

  83. fw-tv188b-261021-0117-r25.c165 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd отдаёт файл .mkv из www плагина с заголовком Content-type: text/html (ответ 206 на GET с Range), а в ответе на HEAD для того же файла заголовка Content-type нет; .txt отдаётся с Content-type: text/plain. ↩

  84. fw-tv188b-261021-0117-r25.c190 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 shell_ext/bin/media_check вызывает /firmware/scripts/ffmpeg.sh, а такого файла на устройстве нет: «media_check: line 27: /firmware/scripts/ffmpeg.sh: No such file or directory», «ffmpeg finished with status 1». ↩

  85. fw-tv188b-261021-0117-r25.c368 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · В образах r24 и r25 есть text-файл system/system/dunehd/firmware/scripts/ffmpeg.sh размером 457 байт с sha256 b26df76585300fd394662fbd02cdb3555cb0b1fd8a9859e5a7d0e876eef867df; в обеих версиях он одинаков. ↩↩

  86. fw-tv188b-261021-0117-r25--builtin-plugins-misc.c047 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве запуск sh $P/firmware/scripts/ffmpeg.sh -version из adb shell напечатал ffmpeg not found. ↩↩

  87. fw-tv188b-261021-0117-r25--builtin-plugins-misc.c048 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве прямой запуск $P/firmware/bin/ffmpeg -version с LD_LIBRARY_PATH=$P/lib:/system/dunehd/firmware/lib из adb shell вывел ffmpeg version 7.1.3; путь ffmpeg — ссылка на $P/lib/libxxx_ffmpeg.so. ↩↩

  88. fw-tv188b-261021-0117-r25.c330 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 метки времени в /tmp/run/<плагин>.log и shell.log на 3 часа меньше местного времени: вызов, который date() в php_server test_plugin5 записал как 13:38:00, в логе плагина помечен 10:38:00.049. ↩↩

  89. fw-tv188b-261021-0117-r25--builtin-plugins-misc.c011 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В MainVod::do_get_vod_stream_info URL собирается с hls_ignore_chunk_errors:0, но при !HD::is_android() второй append_dune_param снова получает исходный $opts->stream_url, поэтому на не-Android остаётся только protocol:hls, а hls_ignore_chunk_errors:0 теряется; в MainEntryHandler::play_movie_stream второй append_dune_param получает уже дополненный $stream_url, поэтому там оба параметра сохраняются. ↩↩

  90. fw-tv188b-261021-0117-r25--downloads.c044 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При opts без ожидаемого JSON-ответа apiHttpPost возвращает true даже после false от file_get_contents; SettingsWrite дополнительно безусловно возвращает true. ↩

  91. fw-tv188b-260827-0003-r24--php-framework.c078 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::get_item($path, $dummy=null) — заглушка, всегда возвращает false ↩

  92. fw-tv188b-261021-0117-r25--shell-ext--android-apps.c011 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · AppShortcuts::static_init объявлен с параметрами product и lang; shell_ext вызывает его с android_platform, product, lang, а MainPlugin android_apps — с product, lang. ↩

  93. fw-tv188b-261021-0117-r25--php-framework.c041 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В ветке MovieListScreen::get_rows при to_ndx==0 написано PluginFolderRows::$rows, хотя dune_api.php объявляет rows как const; это несогласованность обращения к полю в исходнике. ↩

  94. fw-tv188b-261021-0117-r25--shell-ext--entry-handler--movie-screen.c011 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В normal_play при info_tag с двоеточием и без CONTINUE_MODE сравнивается $movie->id с хвостом тега перед switch_osd_mode(true); локального присваивания $movie в этой функции нет. ↩↩

  95. fw-tv188b-260827-0003-r24--shell-ext--ui-lib--gcomp-list.c036 · code · android-dune-fw; прошивка 260827_0003_r24 · Помощник add_insert_actions получает только no_transition: transition для корректировок вставленных строк зависит от no_transition, а no_animation из handle_op ему не передаётся. ↩

  96. fw-tv188b-260827-0003-r24--shell-ext--ui-lib--gcomp-list.c037 · code · android-dune-fw; прошивка 260827_0003_r24 · Изменение родительской панели с children при вставке всегда использует GCOMP_TRANSITION_DEFAULT, включая случай no_transition. ↩

  97. fw-tv188b-261021-0117-r25--shell-ext--ui-lib--support.c020 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · AbstractEpfsHandler::get_epfs_params_path($tmp, $id='main') игнорирует аргумент $tmp и всегда возвращает /_params; read_epfs_params и write_epfs_params работают с этим же путём. ↩

  98. fw-tv188b-260827-0003-r24--shell-ext.c033 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В stop.php сообщение о таймауте говорит «for 10 sec», хотя ожидание ограничено $max_wait_sec = 20 ↩

  99. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c011 · code · android-dune-fw; прошивка 261021_0117_r25 · dune_api.php r25 задаёт StreamMarkerType константами STREAM_MARKER_INTRO='intro', STREAM_MARKER_RECAP='recap', STREAM_MARKER_CLOSING_CREDITS='closing_credits'. ↩↩↩

  100. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c012 · code · android-dune-fw; прошивка 261021_0117_r25 · Нативный конвертер StreamMarkerType r25 (0x001a6e1c) возвращает 0 для 'intro', 1 для 'recap`' с завершающей обратной кавычкой, 2 для 'closing_credits', -1 для остальных строк и NULL. ↩

    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c011 · code · android-dune-fw; прошивка 261021_0117_r25 · dune_api.php r25 задаёт StreamMarkerType константами STREAM_MARKER_INTRO='intro', STREAM_MARKER_RECAP='recap', STREAM_MARKER_CLOSING_CREDITS='closing_credits'.
    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c012 · code · android-dune-fw; прошивка 261021_0117_r25 · Нативный конвертер StreamMarkerType r25 (0x001a6e1c) возвращает 0 для 'intro', 1 для 'recap`' с завершающей обратной кавычкой, 2 для 'closing_credits', -1 для остальных строк и NULL.

    ↩

    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c038 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для единственного маркера type=intro, from=3, to=15 без duration shell.log записал markers_osd_markers I: type intro activated for 7s.
    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c048 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=intro (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить заставку».

    ↩

    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для единственного маркера type=recap, from=3, to=15 без duration shell.log записал markers_osd_markers I: type intro activated for 7s.
    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c049 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=recap (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить заставку», та же, что у intro.

    ↩

    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c040 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для единственного маркера type=recap` с обратной кавычкой, from=3, to=15 без duration shell.log записал markers_osd_markers I: type recap activated for 7s.
    • fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c050 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=recap` с обратной кавычкой (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить вступление».

    ↩↩

  101. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c049 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=recap (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить заставку», та же, что у intro. ↩

  102. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c050 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=recap` с обратной кавычкой (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить вступление». ↩

    • fw-tv188b-261021-0117-r25--media-player.c062 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 intro-маркер 3–20 с из ответа get_vod_stream_info показывает на OSD кнопку «Пропустить заставку» на снимке через 6 с после запуска VOD.
    • fw-tv188b-261021-0117-r25--media-player.c063 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 intro-маркер 3–20 с из PluginVodSeriesInfo::markers показывает на OSD кнопку «Пропустить заставку» на снимке через 6 с после запуска VOD.

    ↩

  103. doc-sdk-plugins--gui-actions.c122 · doc · any-documented; прошивка — · Поле reboot в ChangeSettingsAction определяет, перезагрузить ли приставку немедленно; описание restart_gui в документе дословно то же («whether to reboot STB immediately») ↩

  104. fw-tv188b-261021-0117-r25.c072 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ChangeSettingsAction с restart_gui=true, reboot=false и пустыми settings перезапускает приложение Dune, а не приставку. Оболочка пишет «APK: trigger restart», pid com.dunehd.app меняется 17983 → 19586, а /proc/uptime растёт непрерывно (129033 → 129116 с). ↩

  105. doc-sdk-plugins--operations.c107 · doc · any-documented; прошивка — · PluginVodInfo::buffering_ms (предбуферизация в мс) не реализован ↩

  106. fw-tv188b-261021-0117-r25.c287 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при старте VOD тестового плагина test_plugin6 с PluginVodInfo::buffering_ms=3000 оболочка пишет в shell.log «[player] setting buffering to 3000ms» и «[player] DEBUG: using special buffering 3000ms». ↩

  107. doc-sdk-plugins.c078 · doc · any-documented; прошивка — · Имя параметра get_vod_stream_url различается внутри документа: в объявлении интерфейса — $media_url, в обзоре возможностей — $playback_url ↩

  108. doc-sdk-plugins--operations.c113 · doc · any-documented; прошивка — · В описании операции get_vod_stream_url() (раздел «Plugin operations») параметр назван $playback_url ↩

  109. fw-tv188b-261021-0117-r25.c280 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в call_ctx операции get_vod_stream_url input_data содержит только media_url, равный playback_url ленивой серии (kbp6lazy://2); поля sel_state нет. ↩

  110. doc-sdk-plugins--operations.c083 · doc · any-documented; прошивка — · В описании операции change_tv_favorites() возвращает GuiAction — необязательное GUI-действие, исполняемое немедленно ↩

  111. doc-sdk-plugins--operations.c084 · doc · any-documented; прошивка — · В объявлении интерфейса DunePlugin (раздел «DunePlugin interface») тип результата change_tv_favorites() — void ↩

  112. fw-tv188b-260827-0003-r24--php-framework.c014 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · DunePlugin::change_tv_favorites($op_type, $channel_id, &$plugin_cookies) и handle_user_input(&$user_input, &$plugin_cookies) возвращают GuiAction (по комментариям) ↩

  113. doc-sdk-plugins.c088 · doc · any-documented; прошивка — · Для архива канала нужны PluginTvChannel::have_archive = true, поддержка реального unixtime archive_tm_sec; по умолчанию archive_past_days = 14 дней, archive_delay_sec = 31 минута ↩

  114. doc-sdk-plugins--operations.c072 · doc · any-documented; прошивка — · В объявлении PluginTvChannel глубина архива задаётся полем archive_past_sec; поля archive_past_days в нём нет ↩

  115. doc-sdk-plugins--operations.c058 · doc · any-documented; прошивка — · PluginTvInfo::custom_protect_code_handling (с прошивки 121116): для каналов с is_protected = true, если get_tv_playback_url() вернул строку 'protected', показывается диалог кода, иначе поток считается незащищённым ↩

  116. doc-sdk-plugins.c089 · doc · any-documented; прошивка — · Защищённый канал: is_protected = true, playback_url_is_stream_url = false, protect_code кодируется в playback_url, а get_tv_stream_url() возвращает 'protected' при неверном коде ↩

  117. doc-sdk-plugins.c030 · doc · any-documented; прошивка — · Раздел манифеста утверждает, что из типов движка (dune_plugin->type) поддерживается только 'php' с единственным обязательным параметром 'program' — путём к главному PHP-файлу ↩

  118. doc-sdk-plugins.c102 · doc · any-documented; прошивка — · Для чистых FlashLite/HTML-плагинов вместо 'php' можно указать тип 'plain' — тогда PHP-программа и параметр program не нужны ↩

  119. doc-sdk-plugins--operations.c025 · doc · any-documented; прошивка — · В объявлении PluginMovieFolderView поле series_media_url имеет тип Boolean, хотя в описании это идентификатор (media_url) открываемой папки ↩

  120. fw-tv188b-260827-0003-r24--php-framework--dune-api.c074 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginMovieFolderView::{left_button_caption, right_button_caption, series_media_url} имеют C-тип (char *). ↩

  121. doc-sdk-plugins--gui-actions.c068 · doc · any-documented; прошивка — · Данные PluginUpdateFolderAction описаны классом с именем PluginUpdateFolderAction (без суффикса ActionData): range (PluginRegularFolderRange), need_refresh (Boolean), sel_ndx (необязательно, −1 — не менять) ↩

  122. fw-tv188b-260827-0003-r24--php-framework.c245 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginUpdateFolderActionData с ключами (3): range, need_refresh, sel_ndx ↩

  123. doc-sdk-plugins.c120 · doc · any-documented; прошивка — · Заголовок раздела «Global plugin actions» указывает доступность с прошивки 130315_b6 ↩

  124. doc-sdk-plugins.c121 · doc · any-documented; прошивка — · Текст того же раздела указывает доступность global plugin actions с прошивки 130515_2104_b6 ↩

    • fw-tv188b-261021-0117-r25--libphp5.c038 · 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-бандле сертификат Staat der Nederlanden EV Root CA имеет notAfter 2022-12-08 11:10:28 UTC.
    • fw-tv188b-261021-0117-r25--libphp5.c039 · 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-бандле сертификат E-Tugra Certification Authority имеет notAfter 2023-03-03 12:09:48 UTC.
    • fw-tv188b-261021-0117-r25--libphp5.c040 · 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-бандле сертификат Hongkong Post Root CA 1 имеет notAfter 2023-05-15 04:52:29 UTC.
    • fw-tv188b-261021-0117-r25--libphp5.c041 · 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-бандле сертификат Security Communication RootCA1 имеет notAfter 2023-09-30 04:20:49 UTC.
    • fw-tv188b-261021-0117-r25--libphp5.c042 · 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-бандле сертификат Baltimore CyberTrust Root имеет notAfter 2025-05-12 23:59:00 UTC.

    ↩

  125. 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). ↩

  126. 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, а не только системное хранилище. ↩

  127. 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 может интерпретироваться как указатель на структуру буфера. ↩↩↩

  128. 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. ↩

  129. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c046 · inference · android-dune-fw; прошивка 261021_0117_r25 · По трём маркерам проверки на устройстве на tv188b r25 конечный тип OSD согласуется с таблицей конвертера c012 для 'intro' (intro) и 'recap`' (recap), а 'recap' без кавычки, для которого конвертер по коду возвращает -1, на OSD дал тип intro. Ветви closing_credits, прочих строк и NULL и сами коды возврата на устройстве не проверялись. ↩↩

  130. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для единственного маркера type=recap, from=3, to=15 без duration shell.log записал markers_osd_markers I: type intro activated for 7s. ↩

  131. fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c040 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для единственного маркера type=recap` с обратной кавычкой, from=3, to=15 без duration shell.log записал markers_osd_markers I: type recap activated for 7s. ↩

  132. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c038 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) на пустой ответ get_folder_rows оболочка повторяла запрос без паузы: за ~45 с случая пришло 7977 вызовов get_folder_rows (741 с ["r1","r2"], затем после кнопки вниз — 7234 с ["r1"]), повторы шли до уборки случая. ↩

  133. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) на неполный ответ get_folder_rows (запрошены r1,r2, возвращён только r1) оболочка сразу запросила недостающий ["r2"], затем ["r3"]; после этого повторов не было (3 вызова за случай). ↩

  134. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c016 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (один прогон) пустой ответ get_folder_rows оболочка повторяет запросом тех же id непрерывно, а на неполный ответ сразу дозапрашивает недостающие строки; по коду это согласуется с тем, что неполученные строки остаются LOADING, не попадают в pending и снова проходят фильтр. ↩

  135. fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c061 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) ответ get_folder_rows, где ряд r2 — снова row_dup с data "ld" (вариант ld, как loading-ряд), вызвал цикл повторов без паузы: 18602 вызова get_folder_rows за ~41 с (от ~190 до ~710 в секунду). ↩

    • fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c059 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) ответ get_folder_rows, где ряд r2 — row_regular с пустым items (вариант zero), не вызвал повторов: за ~45 с случая было 2 вызова get_folder_rows (["r1","r2"] и ["r3"]).
    • fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c060 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) ответ get_folder_rows, где вместо ряда r2 отдан row_vgap с тем же id (вариант vgap), не вызвал повторов: за ~45 с случая было 2 вызова get_folder_rows.

    ↩

  136. fw-tv188b-261021-0117-r25--php-framework.c068 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при initial_range 4 из 4 и more_items_available=true, когда тестовый плагин на каждый get_regular_folder_items(from=4) снова отдавал total 4, 2 пункта и more_items_available=true, оболочка повторяла запрос from=4 без конца: 19227 запросов порций за случай (~70 с); на экране были 4 пункта «KB14 over 0…3». ↩↩

  137. fw-tv188b-261021-0117-r25--php-framework.c067 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) при initial_range 4 из 4, но more_items_available=true, оболочка один раз запросила get_regular_folder_items from=4; тестовый плагин ответил total=4 и more_items_available=false, и в папке остались 4 пункта: шесть кнопок вниз довели фокус до «KB13 over 3» и дальше не сдвинули. ↩

  138. doc-sdk-plugins.c138 · inference · android; прошивка — · Вероятно, задумано по аналогии с SMP87xx: на Android содержимое .platform.android переносится в корень, а .platform.87xx удаляется ↩

  139. doc-sdk-plugins.c142 · doc, disputed · any-documented; прошивка — · Перечитать плагины без перезапуска оболочки: в верхнем меню нажать ANGLE/ROTATE (или Refresh в POP UP MENU) либо по IP Control: cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00 ↩

  140. doc-sdk-plugins.c035 · doc, disputed · any-documented; прошивка — · Параметры отображения точки входа: icon_url, icon_margins и icon_fit_scale_factor (120606+), badge_icon_url (120901+), override_default_badge (141005_b9+) — аналоги свойств ViewItemParams ↩

  141. fw-tv188b-261021-0117-r25.c212 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у плагина test_plugin5, все 6 точек входа которого (parent_media_url root://applications) были без icon_url, в /tmp/run/installed_plugins.xml launch_capable 0 и нет category; после добавления в каждую точку входа icon_url gui_skin://large_icons/apps.aai и перезапуска приложения — launch_capable 1 и category applications. ↩

  142. fw-tv188b-261021-0117-r25.c213 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 точки входа плагина test_plugin5 (root://applications), заданные без icon_url, в разделе «Приложения» не появлялись. ↩

  143. doc-sdk-plugins--gui-actions.c006 · doc, disputed · any-documented; прошивка — · Если на GUI_EVENT_PLAYBACK_STOP назначено действие, плеер сначала приостанавливает воспроизведение, исполняет действие, ждёт завершения цепочки действий и только потом выполняет остановку, выключение или переключение ↩

  144. fw-tv188b-261021-0117-r25--media-player.c060 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при ручном STOP в plugin VOD действие playback_stop запускается после перехода Android-плеера в STOPPED. ↩

  145. doc-sdk-plugins--operations.c108 · doc, disputed · any-documented; прошивка — · По тексту документа PluginVodInfo::actions при VOD-воспроизведении поддерживает из клавиш только цветные (GUI_EVENT_KEY_A_RED, GUI_EVENT_KEY_B_GREEN, GUI_EVENT_KEY_C_YELLOW, GUI_EVENT_KEY_D_BLUE); также описаны события таймера (GUI_EVENT_TIMER) и остановки (GUI_EVENT_PLAYBACK_STOP), но перечень в документе обрывается на «- playback» и не является исчерпывающим. ↩

    • doc-sdk-plugins--gui-actions.c013 · doc, disputed · any-documented; прошивка — · С прошивки 131029_b9 все ранее перечисленные клавишные события можно использовать в TV-воспроизведении и VOD-воспроизведении плагина
    • doc-sdk-plugins--gui-actions.c015 · doc, disputed · any-documented; прошивка — · С прошивки 131029_b9 для диалогов с контролами, регулярных папок, TV- и VOD-воспроизведения плагина (с ограничениями) добавлены события GUI_EVENT_KEY_FWD, GUI_EVENT_KEY_REW, GUI_EVENT_KEY_SLOW, GUI_EVENT_KEY_STOP, GUI_EVENT_KEY_TOP_MENU, GUI_EVENT_KEY_POWER, GUI_EVENT_KEY_EJECT, GUI_EVENT_KEY_MODE, GUI_EVENT_KEY_VENDOR, GUI_EVENT_KEY_MUTE, GUI_EVENT_KEY_V_PLUS, GUI_EVENT_KEY_V_MINUS, GUI_EVENT_KEY_SEARCH, GUI_EVENT_KEY_ZOOM, GUI_EVENT_KEY_SUBTITLE, GUI_EVENT_KEY_REPEAT, GUI_EVENT_KEY_AUDIO, GUI_EVENT_KEY_REC, GUI_EVENT_KEY_DUNE, GUI_EVENT_KEY_URL

    ↩

  146. fw-tv188b-261021-0117-r25--media-player.c053 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при регистрации actions в plugin VOD плагину доставляются key_pause, key_play, стрелки, key_subtitle, key_audio, key_next, key_1, key_info и key_popup_menu. ↩

    • doc-sdk-plugins--controls-playback.c044 · doc, disputed · any-documented; прошивка — · Подход B для возобновления VOD предлагает PHP-коду читать данные из /config/resume_state.properties и затем задавать initial_position_ms; чтение файла прямо названо временным решением вне официального PHP API.
    • doc-sdk-plugins--controls-playback.c045 · doc, disputed · any-documented; прошивка — · В подходе C SDK указывает, что /config/resume_state.properties создаётся системой даже без auto_resume в манифесте и может читаться и обрабатываться PHP-кодом плагина.

    ↩

  147. fw-tv188b-261021-0117-r25--media-player.c066 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 resume_state.properties лежит в $FS_PREFIX/config (/data/data/com.dunehd.app/config), а /config/resume_state.properties отсутствует. ↩

  148. fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c049 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · stream_special выбирает файл с минимальным count($file->path) (комментарий «FIXME: temporarily workaround for dune-hd.tv records»), где path — это caption поставщика, и вызывает get_play_movie_action(online) без cur_stream_url ↩

  149. fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c050 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Так как path — строка, count() для всех файлов даёт одно значение (в PHP 5.3.6 — 1), поэтому при непустом списке stream_special всегда играет первый файл списка (при наличии order — после сортировки по order) ↩

  150. fw-tv188b-260827-0003-r24--shell-ext.c026 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В run_async_worker.sh оба пути флагов переданы rm -f одной строкой в кавычках: rm -f "$apidir/wake_flag $apidir/stop_flag" ↩

  151. fw-tv188b-260827-0003-r24--shell-ext.c027 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Из-за кавычек rm -f в run_async_worker.sh получает одно имя файла с пробелом, и старые wake_flag/stop_flag при старте не удаляются; оставшийся stop_flag остановит новый воркер на первой итерации (main_loop проверяет stop_flag первым) ↩

  152. fw-tv188b-260827-0003-r24--shell-ext.c077 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В curl_client.php результат str_replace('?', '?' . $dune_auth . '&', $url, $count) не присваивается $url; если в URL уже есть «?», $count > 0 и параметры авторизации в запрос не попадают ↩

  153. fw-tv188b-261021-0117-r25--shell-ext--ui-lib--support.c062 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · kill_old_instance читает pid-файл, удаляет его, посылает SIGTERM и спит 1 с; из-за удаления файла условие while(is_file(...)) становится ложным уже на второй проверке, поэтому ветка SIGKILL при loop>3 не достигается. ↩

  154. fw-tv188b-261021-0117-r25--shell-ext--ui-lib--support.c071 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Если в versions.txt встречается строка без пробела, get_archive зацикливается на ней: ветка Invalid line делает continue до единственного в цикле вызова strtok("\n"), который перешёл бы к следующей строке. ↩

  155. fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c016 · inference · android-atv; прошивка 260724_0207_r24 · Для '/' в самом начале команды _php_add_fs_prefix_to_cmd проверяет байт перед началом строки (вне команды), поэтому, вероятно, путь первым словом (/config/x.sh …) получает FS_PREFIX непредсказуемо — в зависимости от памяти перед строкой; «sh » при этом добавляется ↩

  156. fw-tv188b-260827-0003-r24--shell-ext.c038 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · shell_ext/bin/curl собран для MIPS (Sigma) и на ARM-устройстве tv188b не запускается; рабочим остаётся /firmware/bin/curl, который media_check выбирает первым ↩

  157. fw-tv188b-260827-0003-r24.c046 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В дереве ФС этой прошивки нет каталога /system/dunehd/firmware/kernel/ и, значит, модулей .ko, которые грузит init.sh: в отсортированном tree.tsv за firmware/fonts/ сразу идёт firmware/lib/ ↩

  158. fw-tv188b-260827-0003-r24.c049 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В tv188b (250815_1012_r22 и 260827_0003_r24) boot.sh и init.sh лежат с правами 0o644 — без бита исполнения ↩

  159. fw-tv188b-260827-0003-r24.c051 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Скрипты boot.sh/init.sh на tv188b, вероятно, — наследие другой платформы и при старте не вызываются: модулей, которые они грузят, в прошивке нет, а файлы не исполняемые ↩

  160. fw-tv188b-261021-0117-r25.c144 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в /tmp/www/cgi-bin/plugins/

    / есть ссылки на run_plugin_cgi и с именами файлов, которые не являются CGI-скриптами: php.ini (shell_ext, Screenshoter, test_plugin6) и .do_config.php.swp (Screenshoter). ↩

  161. fw-tv188b-260827-0003-r24--php-framework.c045 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Сравнения версий в Expr (fwv_ge/gt/le/lt) строковые: strcmp(firmware_version, аргумент) ↩

    • plg-dc-torrent-center.c133 · code · unknown; прошивка — · SmartFileSystemScreen использует shell test -d вместо is_dir для SMB-пути, если get_bug_platform_kind отмечает 8672, 8673 или 8758.
    • plg-dc-screenshoter.c086 · code · sigma-smp86xx; прошивка — · Копия smbtree::get_bug_platform_kind() в Smart_file_screen.php проверяет только platform_kind 8672 (условие продублировано); для «багованной» платформы каталоги /tmp/mnt/smb/ проверяются через shell test -d вместо is_dir()
    • plg-hdtv-smart-vod.c136 · code · unknown; прошивка — · get_bug_platform_kind в Smart_file_screen.php эталона читает /tmp/run/versions.txt и при первом вычислении возвращает true только для platform_kind=8672; обе части OR сравнивают с 8672.

    ↩

  162. plg-dc-screenshoter.c082 · code · sigma-smp86xx, sigma-smp87xx; прошивка — · Копия smbtree::get_bug_platform_kind() в www/cgi-bin/do_config.php считает «багованными» platform_kind 8672, 8673 и 8758 (из /tmp/run/versions.txt) ↩

  163. plg-hdtv-altsource.c082 · code · unknown; прошивка — · Заголовки серий перед показом очищаются HD::get_repl_mips_bug: перечисленные в $repl emoji, обратный слэш и полноширинные ASCII-символы заменяются на *, а символы вне \pL\pN\pP\pS\pZ и NBSP — на пробел. ↩

    • plg-dc-globaltv.c038 · code · unknown; прошивка — · Комментарий в библиотеке: change_tv_favorites() может вернуть NULL даже при успешном выполнении.
    • plg-dc-widget-ext.c016 · code · unknown; прошивка — · Комментарий в библиотеке: change_tv_favorites() может вернуть NULL даже при успешном выполнении

    ↩