zarzet
d24435dbc2
fix: truncate SAF filenames and directory segments safely at UTF-8 boundaries
...
Long track names (especially CJK/emoji) could exceed filesystem limits
when used as SAF document display names, causing write failures.
- Add truncateUtf8Bytes in Go, Kotlin (MainActivity + SafDownloadHandler),
and Dart to truncate strings at valid UTF-8 codepoint boundaries
- Limit SAF filenames to 180 UTF-8 bytes (preserving file extension)
- Limit SAF directory segments to 120 UTF-8 bytes
- Fix Go sanitizeFilename to use UTF-8 aware truncation instead of
byte slice which could split multi-byte characters
- Add Go test for multi-byte truncation correctness
- Sanitize SAF relative directory in Dart native worker and regular
download paths via _sanitizeSafRelativeDir
2026-05-06 01:18:49 +07:00
..
2026-05-04 02:21:17 +07:00
2026-05-05 21:35:18 +07:00
2026-04-13 23:32:12 +07:00
2026-03-26 01:11:29 +07:00
2026-05-04 02:21:17 +07:00
2026-04-13 23:32:17 +07:00
2026-05-03 14:12:53 +07:00
2026-04-18 23:32:16 +07:00
2026-05-06 00:04:49 +07:00
2026-05-04 02:21:17 +07:00
2026-04-13 23:32:17 +07:00
2026-05-04 02:21:17 +07:00
2026-04-13 23:32:17 +07:00
2026-04-13 23:32:14 +07:00
2026-03-15 21:12:47 +07:00
2026-05-04 02:21:17 +07:00
2026-05-04 02:21:17 +07:00
2026-05-05 03:55:24 +07:00
2026-04-16 02:55:40 +07:00
2026-05-06 00:04:49 +07:00
2026-05-04 02:21:17 +07:00
2026-05-03 20:20:28 +07:00
2026-05-04 02:21:17 +07:00
2026-05-06 00:04:49 +07:00
2026-05-03 20:20:28 +07:00
2026-05-03 14:12:53 +07:00
2026-05-05 03:55:24 +07:00
2026-05-05 03:55:24 +07:00
2026-05-06 00:04:49 +07:00
2026-04-29 18:33:44 +07:00
2026-04-13 23:32:18 +07:00
2026-05-06 00:04:49 +07:00
2026-04-13 23:32:17 +07:00
2026-04-29 18:33:44 +07:00
2026-05-04 00:51:52 +07:00
2026-04-13 23:32:17 +07:00
2026-04-29 18:33:44 +07:00
2026-04-13 23:32:17 +07:00
2026-05-06 00:04:49 +07:00
2026-05-04 02:21:17 +07:00
2026-05-03 14:12:53 +07:00
2026-05-03 14:12:53 +07:00
2026-03-08 04:15:28 +07:00
2026-04-13 23:35:03 +07:00
2026-05-05 21:35:18 +07:00
2026-05-03 14:12:53 +07:00
2026-05-06 01:18:49 +07:00
2026-05-06 01:18:49 +07:00
2026-05-03 01:25:26 +07:00
2026-05-03 01:25:26 +07:00
2026-04-13 23:35:03 +07:00
2026-05-04 02:21:17 +07:00
2026-05-06 00:04:49 +07:00
2026-04-13 23:35:03 +07:00
2026-04-13 23:32:14 +07:00
2026-05-04 02:21:17 +07:00
2026-04-13 23:32:12 +07:00
2026-05-06 00:04:49 +07:00
2026-05-04 02:21:17 +07:00
2026-04-13 23:32:15 +07:00
2026-04-13 23:35:03 +07:00
2026-05-06 00:04:49 +07:00
2026-04-13 23:35:03 +07:00
2026-04-13 23:35:03 +07:00
2026-05-04 02:21:17 +07:00
2026-05-04 15:51:57 +07:00
2026-04-13 23:32:12 +07:00
2026-04-13 23:35:03 +07:00
2026-04-13 23:32:17 +07:00
2026-05-06 00:04:49 +07:00
2026-05-04 02:21:17 +07:00
2026-03-08 04:15:28 +07:00
2026-02-19 18:27:14 +07:00
2026-02-19 18:27:14 +07:00
2026-02-19 18:27:14 +07:00
2026-04-18 23:32:16 +07:00
2026-05-04 17:24:57 +07:00
2026-05-06 00:04:49 +07:00
2026-03-08 04:15:28 +07:00
2026-04-13 23:32:14 +07:00
2026-04-13 23:32:15 +07:00
2026-04-13 23:35:03 +07:00
2026-04-18 23:32:16 +07:00
2026-05-06 00:04:49 +07:00