2.0 KiB
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.