quintodrome/core
Deluan Quintão 91fab68578
fix: handle UTF BOM in lyrics and playlist files (#4637)
* fix: handle UTF-8 BOM in lyrics and playlist files

Added UTF-8 BOM (Byte Order Mark) detection and stripping for external lyrics files and playlist files. This ensures that files with BOM markers are correctly parsed and recognized as synced lyrics or valid playlists.

The fix introduces a new ioutils package with UTF8Reader and UTF8ReadFile functions that automatically detect and remove UTF-8, UTF-16 LE, and UTF-16 BE BOMs. These utilities are now used when reading external lyrics and playlist files to ensure consistent parsing regardless of BOM presence.

Added comprehensive tests for BOM handling in both lyrics and playlists, including test fixtures with actual BOM markers to verify correct behavior.

* test: add test for UTF-16 LE encoded LRC files

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2025-10-31 09:07:23 -04:00
..
agents feat(insights): add plugin and multi-library information (#4391) 2025-07-28 13:21:10 -04:00
artwork feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00
auth feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
external fix(server): ensure that similar artists retrieved from provider are no more than limit (#4267) 2025-06-29 12:19:29 -04:00
ffmpeg fix(server): better embedded artwork extraction with ffmpeg (#3860) 2025-03-20 19:26:40 -04:00
lyrics fix: handle UTF BOM in lyrics and playlist files (#4637) 2025-10-31 09:07:23 -04:00
metrics feat(insights): add plugin and multi-library information (#4391) 2025-07-28 13:21:10 -04:00
playback test: fix mpv tests on systems without /bin/bash installed - 4301 (#4302) 2025-07-02 21:55:55 -04:00
scrobbler feat(insights): add plugin and multi-library information (#4391) 2025-07-28 13:21:10 -04:00
storage fix: improve URL path handling in local storage for special characters (#4378) 2025-07-23 20:46:47 -04:00
archiver.go feat(server): add M3U file to downloaded playlist 2025-05-27 20:13:37 -04:00
archiver_test.go feat(server): add M3U file to downloaded playlist 2025-05-27 20:13:37 -04:00
common.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
common_test.go test: add tests for userName and AbsolutePath in core/common.go 2025-04-18 11:53:47 -04:00
core_suite_test.go Rename log.LevelCritical to log.LevelFatal 2022-12-21 14:53:36 -05:00
inspect.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
library.go feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00
library_test.go feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00
media_streamer.go feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes (#2709) 2025-02-19 20:35:17 -05:00
media_streamer_Internal_test.go fix: forcing transcoding when client does not specify transcoding options (#3455) 2024-11-05 20:39:05 -05:00
media_streamer_test.go Add support for timeOffset in /stream endpoint 2023-12-02 13:10:36 -05:00
mock_library_service.go feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00
players.go feat(server): group Subsonic config options together 2025-03-05 12:29:30 -08:00
players_test.go Use userId in player, other fixes (#3182) 2024-08-03 13:37:21 -04:00
playlists.go fix: handle UTF BOM in lyrics and playlist files (#4637) 2025-10-31 09:07:23 -04:00
playlists_test.go fix: handle UTF BOM in lyrics and playlist files (#4637) 2025-10-31 09:07:23 -04:00
share.go fix(server): headless library access improvements (#4362) 2025-07-20 15:58:21 -04:00
share_test.go Add option to allow share to be downloaded 2023-03-10 23:33:29 -05:00
wire_providers.go feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00