3.5.3 crashes with ClassCastException in SharedPreferencesImpl.java on start-up
Description
I upgraded VLC from 3.3.x to 3.5.3 and it is now crashing on start-up with a ClassCastException
.
It looks like the exception is caused by an older subtitles_color
value. I see related discussion and fixes here:
I believe I can work around the bug by deleting my old preferences, but I thought I'd report the issue in case there's a larger problem with the version-migration approach.
Log
I VersionMigration: Migrating version to Version 2: flush all the video thumbnails
I TetheringManager: registerTetheringEventCallback:org.videolan.vlc
I VLC/LibVLC/Util: ELF ABI = arm, 32bits
I VLC/LibVLC/Util: ELF arch = v7
I VLC/LibVLC/Util: ELF fpu = false
D VLC/LibVLC/Util: machineSpecs: hasArmV6: true, hasArmV7: true, hasX86: false, is64bits: false
D VLC/medialibrary: [T#2105831872] ../src/filesystem/FsHolder.cpp:93 registerDeviceLister Registering device lister for scheme file://
I VLC/medialibrary: [T#2105831872] ../src/MediaLibrary.cpp:634 initialize Initializing medialibrary...
I VLC/medialibrary: [T#2105831872] ../src/MediaLibrary.cpp:636 initialize Current version is 0.12.3. Database model is 36
D VLC/medialibrary: [T#2105831872] ../src/database/SqliteConnection.cpp:106 handle Fetched absolute database path from sqlite: /data/user/0/org.videolan.vlc/app_db/vlc_media.db
I VLC/medialibrary: [T#2105831872] ../src/MediaLibrary.cpp:726 initialize Successfully initialized
D VLC/medialibrary: [T#2105831872] ../src/filesystem/libvlc/FileSystemFactory.cpp:116 start Starting FS Factory with scheme file://
I VLC/medialibrary: [T#2105831872] ../src/filesystem/FsHolder.cpp:257 refreshDevice Device main-storage presence is unchanged
I VLC/medialibrary: [T#2105831872] ../src/filesystem/FsHolder.cpp:257 refreshDevice Device 1851-160F presence is unchanged
D VLC/medialibrary: [T#2105831872] ../src/parser/Parser.cpp:153 restore No task to resume.
E VLC/VlcCrashHandler: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
E VLC/VlcCrashHandler: at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:321)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCOptions.getLibOptions(VLCOptions.kt:87)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCInstance.init(VLCInstance.kt:58)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCInstance$1.invoke(VLCInstance.kt:40)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCInstance$1.invoke(VLCInstance.kt:40)
E VLC/VlcCrashHandler: at org.videolan.tools.SingletonHolder.getInstance(SingletonHolder.kt:31)
E VLC/VlcCrashHandler: at org.videolan.vlc.MediaParsingService.processAction(MediaParsingService.kt:492)
E VLC/VlcCrashHandler: at org.videolan.vlc.MediaParsingService.access$processAction(MediaParsingService.kt:63)
E VLC/VlcCrashHandler: at org.videolan.vlc.MediaParsingService$processAction$1.invokeSuspend(Unknown Source:15)
E VLC/VlcCrashHandler: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E VLC/VlcCrashHandler: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
E VLC/VlcCrashHandler: at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
E VLC/VlcCrashHandler: at Android.MODEL(SPH-L720)
E VLC/VlcCrashHandler: at Android.VERSION(11)
E VLC/VlcCrashHandler: at Android.FINGERPRINT(samsung/jfltespr/jfltespr:5.0.1/LRX22C/L720VPSGPL1:user/release-keys)
E VLC/VlcCrashHandler: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
E VLC/VlcCrashHandler: at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:321)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCOptions.getLibOptions(VLCOptions.kt:87)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCInstance.init(VLCInstance.kt:58)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCInstance$1.invoke(VLCInstance.kt:40)
E VLC/VlcCrashHandler: at org.videolan.resources.VLCInstance$1.invoke(VLCInstance.kt:40)
E VLC/VlcCrashHandler: at org.videolan.tools.SingletonHolder.getInstance(SingletonHolder.kt:31)
E VLC/VlcCrashHandler: at org.videolan.vlc.MediaParsingService.processAction(MediaParsingService.kt:492)
E VLC/VlcCrashHandler: at org.videolan.vlc.MediaParsingService.access$processAction(MediaParsingService.kt:63)
E VLC/VlcCrashHandler: at org.videolan.vlc.MediaParsingService$processAction$1.invokeSuspend(Unknown Source:15)
E VLC/VlcCrashHandler: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E VLC/VlcCrashHandler: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
E VLC/VlcCrashHandler: at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
E VLC/VlcCrashHandler: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
E VLC/VlcCrashHandler: at Android.MODEL(SPH-L720)
E VLC/VlcCrashHandler: at Android.VERSION(11)
E VLC/VlcCrashHandler: at Android.FINGERPRINT(samsung/jfltespr/jfltespr:5.0.1/LRX22C/L720VPSGPL1:user/release-keys)
E VLC/VlcCrashHandler: at Android.MODEL(SPH-L720)
E VLC/VlcCrashHandler: at Android.VERSION(11)
E VLC/VlcCrashHandler: at Android.FINGERPRINT(samsung/jfltespr/jfltespr:5.0.1/LRX22C/L720VPSGPL1:user/release-keys)
E AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1 @coroutine#21
E AndroidRuntime: Process: org.videolan.vlc, PID: 18949
E AndroidRuntime: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
E AndroidRuntime: at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:321)
E AndroidRuntime: at org.videolan.resources.VLCOptions.getLibOptions(VLCOptions.kt:87)
E AndroidRuntime: at org.videolan.resources.VLCInstance.init(VLCInstance.kt:58)
E AndroidRuntime: at org.videolan.resources.VLCInstance$1.invoke(VLCInstance.kt:40)
E AndroidRuntime: at org.videolan.resources.VLCInstance$1.invoke(VLCInstance.kt:40)
E AndroidRuntime: at org.videolan.tools.SingletonHolder.getInstance(SingletonHolder.kt:31)
E AndroidRuntime: at org.videolan.vlc.MediaParsingService.processAction(MediaParsingService.kt:492)
E AndroidRuntime: at org.videolan.vlc.MediaParsingService.access$processAction(MediaParsingService.kt:63)
E AndroidRuntime: at org.videolan.vlc.MediaParsingService$processAction$1.invokeSuspend(Unknown Source:15)
E AndroidRuntime: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E AndroidRuntime: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
E AndroidRuntime: at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
E AndroidRuntime: at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
E AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
E AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
E AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
E AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
E AndroidRuntime: at Android.MODEL(SPH-L720)
E AndroidRuntime: at Android.VERSION(11)
E AndroidRuntime: at Android.FINGERPRINT(samsung/jfltespr/jfltespr:5.0.1/LRX22C/L720VPSGPL1:user/release-keys)
E AndroidRuntime: at Android.MODEL(SPH-L720)
E AndroidRuntime: at Android.VERSION(11)
E AndroidRuntime: at Android.FINGERPRINT(samsung/jfltespr/jfltespr:5.0.1/LRX22C/L720VPSGPL1:user/release-keys)
org.videolan.vlc_preferences.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="casting_quality">2</string>
<string name="custom_libvlc_options"></string>
<string name="hardware_acceleration">-1</string>
<boolean name="app_onboarding_done" value="true" />
<int name="first_run" value="3050300" />
<boolean name="blurred_cover_background" value="false" />
<string name="subtitle_text_encoding"></string>
<boolean name="widget_migration_key" value="true" />
<int name="fragment_id" value="2131362484" />
<boolean name="playback_speed" value="false" />
<boolean name="enable_clone_mode" value="false" />
<boolean name="enable_headset_detection" value="true" />
<boolean name="casting_passthrough" value="false" />
<boolean name="prefer_smbv1" value="true" />
<boolean name="enable_frame_skip" value="false" />
<boolean name="audio_boost" value="true" />
<boolean name="playback_history" value="false" />
<string name="deblocking">-1</string>
<boolean name="media_fast_seek" value="true" />
<long name="permission_next_ask" value="1678151671206" />
<boolean name="save_individual_audio_delay" value="false" />
<boolean name="enable_volume_gesture" value="true" />
<boolean name="subtitles_bold" value="false" />
<string name="chroma_format">RV16</string>
<boolean name="enable_double_tap_seek" value="true" />
<boolean name="enable_seek_buttons" value="false" />
<string name="subtitles_size">16</string>
<string name="video_action_switch">1</string>
<string name="video_confirm_resume">1</string>
<boolean name="popup_keepscreen" value="false" />
<boolean name="subtitles_background" value="false" />
<boolean name="save_brightness" value="false" />
<boolean name="video_transition_show" value="false" />
<boolean name="enable_casting" value="true" />
<boolean name="audio_resume_card" value="false" />
<int name="current_settings_version" value="1" />
<boolean name="show_video_thumbnails" value="false" />
<boolean name="enable_brightness_gesture" value="true" />
<string name="video_hud_timeout">2</string>
<string name="screen_orientation">100</string>
<boolean name="enable_time_stretching_audio" value="true" />
<boolean name="subtitles_autoload" value="true" />
<boolean name="auto_rescan" value="true" />
<boolean name="enable_verbose_mode" value="false" />
<string name="network_caching"></string>
<string name="set_locale"></string>
<int name="ml_scan" value="0" />
<boolean name="lockscreen_cover" value="false" />
<string name="aout">0</string>
<boolean name="audio_task_removed" value="false" />
<string name="list_title_ellipsize">0</string>
<boolean name="audio_ducking" value="true" />
<boolean name="media_seen" value="false" />
<string name="opengl">-1</string>
<boolean name="resume_playback" value="true" />
<string name="app_theme">2</string>
<boolean name="force_play_all" value="false" />
<string name="subtitles_color">16777215</string>
<boolean name="audio_digital_output" value="false" />
<boolean name="enable_play_on_headset_insertion" value="false" />
<boolean name="popup_force_legacy" value="false" />
</map>
Context
App version
3.5.3
Android version
LineageOS 18.1 (Android 11)
Device model
Samsung Galaxy S4