Реестр ошибок прошивки и 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) |
-
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). ↩↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c050 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · www.ssl.com на tv188b r25 из php_server (uid 1000) с полным бандлом, без корня Entrust и только с корнем Entrust при включённой проверке TLS даёт errno 60 «self signed certificate in certificate chain»; без проверки — HTTP 200, а цепочка заканчивается самоподписанным SSL.com TLS RSA Root CA 2022. ↩↩↩↩↩
-
fw-tv188b-261021-0117-r25.c234 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку), выполнивший curl_multi на 4 хендла к httpd самого плеера (http://127.0.0.1/plugins/…, http://127.0.0.1:80/cgi-bin/plugins/…, http://localhost/cgi-bin/plugins/…), доходит до curl_multi_info_read и получает все 4 сообщения с msg=1 result=0, после чего php-cgi завершается с кодом 139 и в /tmp/dune_apk_cgi_err.log появляется «Segmentation fault»; повторный запуск дал то же самое. ↩↩
-
fw-tv188b-261021-0117-r25.c235 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тот же тестовый плагин curl_multi (4 хендла к httpd плеера) в php_server PHP-плагина (операция handle_user_input) доходит до curl_multi_info_read со всеми 4 сообщениями msg=1 result=0; результата операция не возвращает: через ~0,25 с после её начала оболочка пишет в shell.log «[test_plugin6] [php] E: op 11 failed (read status: 2).», «shutting down...», «stopped.» и «Error: operation returned PHP_CALL_FAILED.». ↩
-
fw-tv188b-261021-0117-r25.c236 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после сбоя операции handle_user_input php_server с «op 11 failed (read status: 2)» и PHP_CALL_FAILED оболочка пишет «FATAL ERROR detected (msg = Ошибка приложения)» и показывает диалог «Ошибка приложения / Произошла ошибка. Приложение будет закрыто.» с кнопкой OK; после закрытия плеер не завис. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c025 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi на четырёх HTTP-хендлах к компьютеру записал четыре info_read msg=1 result=0 и строку после curl_multi_info_read. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c026 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве шаг multi не записал end за 25 с; сохранённый отчёт обрывается после curl_multi_info_read, без h0 и curl_multi_close прошёл, а заголовок сбора уже показывает php_server(test_plugin11)=нет. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c027 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве на четырёх HTTP-хендлах к компьютеру после curl_multi_exec(run=0) пять вызовов curl_multi_info_read вернули четыре пары msg=1/result=0, затем false; каждый вызов имеет метки до и после. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c028 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве curl_getinfo(h0, CURLINFO_HTTP_CODE) записал возврат 200; последняя строка отчёта — «перед curl_multi_getcontent h0», без последующей метки этого вызова. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c029 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве оболочка получила EOF от PHP-сервера, записала PHP_CALL_FAILED и stopped; end multi за 25 с не появился, а при сборе php_server тестового плагина уже не найден. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c030 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве HTTP-сервер компьютера зарегистрировал все четыре GET /ping?multi=0..3 и ответил на каждый статусом 200, отдав по 3 байта. ↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.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»; повторный запуск дал то же самое.
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c041 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi с RETURNTRANSFER: после curl_multi_info_read (четыре msg=1 result=0) последняя метка — «перед curl_multi_getcontent h0»; php_server 23156 упал с SIGSEGV (SEGV_MAPERR, fault addr 0x70747490), кадр #00 — libphp5.so zif_curl_multi_getcontent+116 (pc 0010e5d0), tombstone записан (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c042 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве после падения php_server в curl_multi_getcontent оболочка получила EOF от PHP-сервера, записала «op 5 failed», PHP_CALL_FAILED и «[handle_user_input] Failed.»; php_server тестового плагина после шага не было (один прогон). ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c040 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_multi с четырьмя хендлами и CURLOPT_FILE без curl_multi_getcontent прошёл до конца: curl_getinfo вернул 200 у каждого, файлы multi_0..3.out по 3 байта, метка «после curl_multi_close», php_server после шага жив, в logcat -b crash за случай записей нет (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.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).
-
fw-tv188b-261021-0117-r25--libphp5.c036 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · CA-бандлы всех пяти исследованных сборок совпадают по SHA-256 722be2869ed2c2a949e5edb75b030f1e737e869ca8e8f70bc8d876dd93227ead. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c037 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Заголовки CA-бандлов пяти исследованных сборок датируют данные Mozilla 11 октября 2022 года. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c031 · code · android-dune-fw; прошивка 261021_0117_r25 · CA-бандл сборки fw-tv188b-261021-0117-r25 содержит 143 PEM-сертификата. ↩
-
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. ↩
-
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. ↩↩↩
-
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. ↩
-
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. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c057 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Если вызывающий передал CURLOPT_SSL_VERIFYPEER=true для https-URL, HD::http_get_document подставляет CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt ↩↩
-
fw-tv188b-261021-0117-r25--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. ↩
-
fw-tv188b-261021-0117-r25.c251 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server и php-cgi файл /firmware/certs/ca-bundle.crt доступен (is_file true; размер 227282, md5 e9dc50a63d76d3c88baa24a4374c4542), как и $FS_PREFIX/firmware/certs/ca-bundle.crt; в нём 143 PEM-блока сертификатов. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.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.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 CNEntrust.net Certification Authority (2048)),Entrust Root Certification Authority - G2,Entrust Root Certification Authority - EC1иEntrust Root Certification Authority - G4. ↩ -
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. ↩↩
-
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в бандле нет. ↩ -
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; причина не установлена. ↩↩↩
-
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. ↩
-
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). ↩
-
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. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c056 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::http_get_document по умолчанию отключает проверку TLS-сертификата (CURLOPT_SSL_VERIFYPEER=false), следует редиректам, ставит CURLOPT_ENCODING=1 и тайм-ауты из $DEFAULT_CURL_*; опции вызывающего применяются поверх ↩↩
-
fw-tv188b-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. ↩↩
-
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 перезаписывается). ↩↩
-
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)». ↩↩
-
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 с, отменён не был. ↩
-
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 затем использует как общий тайм-аут операций в секундах. ↩
-
doc-sdk-plugins.c042 · doc · any-documented; прошивка — · По SDK тайм-аут операций плагина по умолчанию составляет 10 секунд; operation_timeout задаёт общий (
) и потиповой ( N ) тайм-аут. ↩ -
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 с. ↩↩ -
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). ↩↩
-
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). ↩↩
-
doc-sdk-plugins--gui-actions.c042 · doc · any-documented; прошивка — · PluginHandleUserInputAction не имеет данных; выполняет операцию Handle_user_input(GuiAction::$params) и возвращает её результат как post action ↩
-
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 ↩
-
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. ↩
-
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. ↩
-
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. ↩↩
-
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). ↩
-
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).
-
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 не выполнялся. ↩
-
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 не являются постоянной границей.
-
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. ↩↩
-
doc-sdk-plugins--gui-actions.c017 · doc · any-documented; прошивка — · С прошивки 150529 событие GUI_EVENT_PLAYBACK_GOING_TO_SWITCH генерируется перед переключением на новый media URL; в отличие от GUI_EVENT_PLAYBACK_STOP, оно не генерируется при остановке и выключении ↩
-
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. ↩ -
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.
- 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-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). ↩↩ -
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. ↩
-
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. ↩
-
doc-sdk-plugins.c140 · doc · android; прошивка — · В SDK для Android приведены команды развёртывания плагина: adb push в /flashdata/plugins/ и chmod -R +x для bin и www/cgi-bin внутри каталога плагина. ↩
-
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. ↩↩
-
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 нет ↩↩↩
-
fw-tv188b-261021-0117-r25--shell-ext--search-tv.c045 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 params-файл плагина записывается сразу после system() до проверки кода возврата, а описатели копируются независимо от него; ненулевой код только логируется. Поэтому при ошибке скрипта плагин всё равно получает новый params и описатели, если они есть. ↩
-
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-…»). ↩
-
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"). ↩↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c014 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_cmd ищет в команде символы '/' и проверяет путь, только если перед '/' стоит пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или обратная кавычка; после двойной кавычки, '=', '|', ':', табуляции и прочих символов путь не переписывается ↩
-
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/… ↩
-
fw-tv188b-261021-0117-r25.c346 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после cmd=main_screen во время операции плагина (C2) главный экран оболочки был чёрным; вернул его только keyevent HOME; причина не установлена. ↩↩
-
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 без предварительного имени поля для его объекта. ↩
-
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. ↩
-
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":{...}}}. ↩↩↩
-
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. ↩
-
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, по одному прогону на команду; последовательность сериализатора — по коду). ↩↩
-
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. ↩
-
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. ↩
-
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/
-
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. ↩
-
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». ↩
-
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; в обеих версиях он одинаков. ↩↩
-
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. ↩↩
-
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. ↩↩
-
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. ↩↩
-
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, поэтому там оба параметра сохраняются. ↩↩
-
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. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c078 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::get_item($path, $dummy=null) — заглушка, всегда возвращает false ↩
-
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. ↩
-
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; это несогласованность обращения к полю в исходнике. ↩
-
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 в этой функции нет. ↩↩
-
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 ему не передаётся. ↩
-
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. ↩
-
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 работают с этим же путём. ↩ -
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 ↩
-
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.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 с после запуска была кнопка «Пропустить вступление».
-
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.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.
-
doc-sdk-plugins--gui-actions.c122 · doc · any-documented; прошивка — · Поле reboot в ChangeSettingsAction определяет, перезагрузить ли приставку немедленно; описание restart_gui в документе дословно то же («whether to reboot STB immediately») ↩
-
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 с). ↩
-
doc-sdk-plugins--operations.c107 · doc · any-documented; прошивка — · PluginVodInfo::buffering_ms (предбуферизация в мс) не реализован ↩
-
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». ↩
-
doc-sdk-plugins.c078 · doc · any-documented; прошивка — · Имя параметра get_vod_stream_url различается внутри документа: в объявлении интерфейса — $media_url, в обзоре возможностей — $playback_url ↩
-
doc-sdk-plugins--operations.c113 · doc · any-documented; прошивка — · В описании операции get_vod_stream_url() (раздел «Plugin operations») параметр назван $playback_url ↩
-
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 нет. ↩
-
doc-sdk-plugins--operations.c083 · doc · any-documented; прошивка — · В описании операции change_tv_favorites() возвращает GuiAction — необязательное GUI-действие, исполняемое немедленно ↩
-
doc-sdk-plugins--operations.c084 · doc · any-documented; прошивка — · В объявлении интерфейса DunePlugin (раздел «DunePlugin interface») тип результата change_tv_favorites() — void ↩
-
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 (по комментариям) ↩
-
doc-sdk-plugins.c088 · doc · any-documented; прошивка — · Для архива канала нужны PluginTvChannel::have_archive = true, поддержка реального unixtime archive_tm_sec; по умолчанию archive_past_days = 14 дней, archive_delay_sec = 31 минута ↩
-
doc-sdk-plugins--operations.c072 · doc · any-documented; прошивка — · В объявлении PluginTvChannel глубина архива задаётся полем archive_past_sec; поля archive_past_days в нём нет ↩
-
doc-sdk-plugins--operations.c058 · doc · any-documented; прошивка — · PluginTvInfo::custom_protect_code_handling (с прошивки 121116): для каналов с is_protected = true, если get_tv_playback_url() вернул строку 'protected', показывается диалог кода, иначе поток считается незащищённым ↩
-
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' при неверном коде ↩
-
doc-sdk-plugins.c030 · doc · any-documented; прошивка — · Раздел манифеста утверждает, что из типов движка (dune_plugin->type) поддерживается только 'php' с единственным обязательным параметром 'program' — путём к главному PHP-файлу ↩
-
doc-sdk-plugins.c102 · doc · any-documented; прошивка — · Для чистых FlashLite/HTML-плагинов вместо 'php' можно указать тип 'plain' — тогда PHP-программа и параметр program не нужны ↩
-
doc-sdk-plugins--operations.c025 · doc · any-documented; прошивка — · В объявлении PluginMovieFolderView поле series_media_url имеет тип Boolean, хотя в описании это идентификатор (media_url) открываемой папки ↩
-
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 *). ↩
-
doc-sdk-plugins--gui-actions.c068 · doc · any-documented; прошивка — · Данные PluginUpdateFolderAction описаны классом с именем PluginUpdateFolderAction (без суффикса ActionData): range (PluginRegularFolderRange), need_refresh (Boolean), sel_ndx (необязательно, −1 — не менять) ↩
-
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 ↩
-
doc-sdk-plugins.c120 · doc · any-documented; прошивка — · Заголовок раздела «Global plugin actions» указывает доступность с прошивки 130315_b6 ↩
-
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.
-
fw-tv188b-261021-0117-r25--libphp5.c052 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Истечение «Entrust Root Certification Authority» 2026-11-27 не должно изменить результат HTTPS для 17 из 19 хостов hosts10.txt, успешных 2026-11-02, при запросах из php_server (uid 1000): уже 2026-11-02 все они проходят проверку без этого корня. Это не прогноз для сайтов вне hosts10.txt и для двух хостов, не прошедших проверку (www.ssl.com, kodikapi.com). ↩
-
fw-tv188b-261021-0117-r25--libphp5.c049 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Разница между полным бандлом и бандлом только из корня Entrust на одних и тех же 17 хостах в прогоне из php_server (uid 1000) при включённой проверке TLS означает, что PHP cURL в php_server r25 учитывает CURLOPT_CAINFO, а не только системное хранилище. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c031 · inference, disputed · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Вероятная причина прекращения multi проверки на устройстве около curl_multi_getcontent — несогласованное использование поля handle+0x16c в r25: сохранённый URL может интерпретироваться как указатель на структуру буфера. ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c043 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Регистр r3 = 0x70747468 в момент падения равен байтам ASCII «http» (little-endian), а fault addr = r3 + 0x28; вероятно, в zif_curl_multi_getcontent как указатель разыменованы байты строки URL — это согласуется с гипотезой c031 о несогласованном поле handle+0x16c. ↩
-
fw-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 и сами коды возврата на устройстве не проверялись. ↩↩
-
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.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--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"]), повторы шли до уборки случая. ↩
-
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 вызова за случай). ↩
-
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 и снова проходят фильтр. ↩
-
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.
-
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». ↩↩
-
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» и дальше не сдвинули. ↩
-
doc-sdk-plugins.c138 · inference · android; прошивка — · Вероятно, задумано по аналогии с SMP87xx: на Android содержимое .platform.android переносится в корень, а .platform.87xx удаляется ↩
-
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 ↩
-
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 ↩
-
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. ↩
-
fw-tv188b-261021-0117-r25.c213 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 точки входа плагина test_plugin5 (root://applications), заданные без icon_url, в разделе «Приложения» не появлялись. ↩
-
doc-sdk-plugins--gui-actions.c006 · doc, disputed · any-documented; прошивка — · Если на GUI_EVENT_PLAYBACK_STOP назначено действие, плеер сначала приостанавливает воспроизведение, исполняет действие, ждёт завершения цепочки действий и только потом выполняет остановку, выключение или переключение ↩
-
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. ↩
-
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
-
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-кодом плагина.
-
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 отсутствует. ↩
-
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 ↩
-
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) ↩
-
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" ↩
-
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 первым) ↩
-
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 и параметры авторизации в запрос не попадают ↩
-
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 не достигается. ↩
-
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"), который перешёл бы к следующей строке. ↩
-
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 » при этом добавляется ↩
-
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 выбирает первым ↩
-
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/ ↩
-
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 — без бита исполнения ↩
-
fw-tv188b-260827-0003-r24.c051 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Скрипты boot.sh/init.sh на tv188b, вероятно, — наследие другой платформы и при старте не вызываются: модулей, которые они грузят, в прошивке нет, а файлы не исполняемые ↩
-
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). ↩
-
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.
-
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) ↩
-
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 даже при успешном выполнении