Files
philips-tv-speicher-voll/diagnostics/vendor-bugs/BUG-003-usb-free-size-zero.md

2.0 KiB
Raw Blame History

UsbVolumeLister reports zero free bytes for mounted USB volumes

Klassifikation

CONFIRMED BUG – Medium. Komponente /system/framework/tvfw.jar, Klasse UsbVolumeListerImpl, Methode getVolumes(String).

Benutzerwirkung

Philips-Komponenten erhalten für ein öffentliches USB-Volume und das private adopted Volume mFreeSize=0, obwohl df 44,2 bzw. 114,8 Millionen KiB frei meldet. Dadurch sind falsche Speicheranzeigen und fehlerhafte Entscheidungen möglich.

Erwartetes / tatsächliches Verhalten

Für jedes MOUNTED-Volume muss die nutzbare Kapazität seines realen Pfades geliefert werden. Der Code setzt mFreeDiskSize jedoch nur, wenn SystemProperties.get("sys.mtk.dmremoteservice.ready") exakt "1" ist. Live ist diese Property leer; vorhanden ist vendor.mtk.dmremoteservice.ready=0. Der Java-Initialwert 0 wird ungeprüft als echter Messwert weitergegeben.

Reproduktion und Beweis

Ein public- und ein adopted-USB-Volume mounten, Philips-UsbVolumeLister-Log mit df/StatFs desselben Pfades vergleichen. Details und Bytecodekette: usb-volume-uid1000-analysis.md.

Root Cause / Fix

Eine optionale Remote-Service-Bereitschaft wird fälschlich zum einzigen Messpfad. Exakt lokalisiert: classes.dex, getVolumes(String), code_off=0x17b5e0, Property-Branch PC 0x0133. Der MediaTek-Produzent liefert KiB; UsbVolume publiziert nach weiterer Division MiB. Robust ist: DeviceManager-Wert nur verwenden, wenn ready und plausibel; sonst StatFs(volumeInfo.path) in MiB. Ein unbekannter Wert darf nicht als echte Null erscheinen. Details: IMPLEMENTATION.md.

Regression Tests / Hash

Der Offline-Test bestand ready/unready, plausible/unplausible DM-Werte, StatFs-Fallback, >2 TiB, echte Null und unknown. Live folgen public/adopted, Mount/Unmount/Reinsert und Permission-Fälle. tvfw.jar SHA-256: a0061795d87cf76c9b739e32022ab3d8c29f47ed01ddc1eee189dd815a8d11ad.