From 5e0e7f5f7d6f4d6c4bffcda6a509f48aa2effcda Mon Sep 17 00:00:00 2001 From: Jonathan Flat Date: Thu, 3 Jul 2025 13:52:55 -0600 Subject: [PATCH] (154976578) String.pathExtension should allow "..name" file names but not ".." --- .../String/String+Path.swift | 17 +++++++++++------ .../FoundationEssentialsTests/StringTests.swift | 13 +++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Sources/FoundationEssentials/String/String+Path.swift b/Sources/FoundationEssentials/String/String+Path.swift index 975d3f51b..bc149baac 100644 --- a/Sources/FoundationEssentials/String/String+Path.swift +++ b/Sources/FoundationEssentials/String/String+Path.swift @@ -224,14 +224,19 @@ extension String { } internal var pathExtension: String { - let lastComponent = lastPathComponent.utf8 - guard lastComponent.last != ._dot, - !lastComponent.starts(with: [._dot, ._dot]), - let lastDot = lastComponent.lastIndex(of: ._dot), - lastDot != lastComponent.startIndex else { + let utf8Component = lastPathComponent.utf8 + guard utf8Component.last != ._dot, + let lastDot = utf8Component.lastIndex(of: ._dot), + // Don't treat a hidden file name as an extension + lastDot != utf8Component.startIndex else { return "" } - let result = String(lastPathComponent[lastComponent.index(after: lastDot)...]) + let utf8FileName = utf8Component[..