Reject dot-only chat names to prevent zip-slip in plaintext export.

This commit is contained in:
Greyson Parrelli
2026-07-15 16:43:46 -04:00
parent 8bc31386a5
commit b60f53f4df
2 changed files with 22 additions and 1 deletions
@@ -723,6 +723,26 @@ class PlaintextExportRepositoryTest {
assertEquals("My Chat Group 2024", PlaintextExportRepository.sanitizeFileName("My Chat Group 2024"))
}
@Test
fun `sanitizeFileName rejects dot-only names to prevent path traversal`() {
assertEquals("chat", PlaintextExportRepository.sanitizeFileName("."))
assertEquals("chat", PlaintextExportRepository.sanitizeFileName(".."))
assertEquals("chat", PlaintextExportRepository.sanitizeFileName("..."))
assertEquals("chat", PlaintextExportRepository.sanitizeFileName(" .. "))
}
@Test
fun `sanitizeFileName falls back for empty result`() {
assertEquals("chat", PlaintextExportRepository.sanitizeFileName(""))
assertEquals("chat", PlaintextExportRepository.sanitizeFileName(" "))
}
@Test
fun `sanitizeFileName preserves names that merely contain dots`() {
assertEquals("..hidden", PlaintextExportRepository.sanitizeFileName("..hidden"))
assertEquals("my.chat.group", PlaintextExportRepository.sanitizeFileName("my.chat.group"))
}
// ==================== getSenderName tests ====================
@Test