From a2b45b9aa5e09b1a2fa0a20b5dc3e9c208297d6a Mon Sep 17 00:00:00 2001 From: Simon Leeb <52261246+sliemeobn@users.noreply.github.com> Date: Tue, 2 May 2023 19:54:25 +0200 Subject: [PATCH] Fixed empty lines at end of dotEnv parsing (#192) --- Sources/Hummingbird/Environment.swift | 3 +++ Tests/HummingbirdTests/EnvironmentTests.swift | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/Sources/Hummingbird/Environment.swift b/Sources/Hummingbird/Environment.swift index f852b1bc4..0c1fa7f76 100644 --- a/Sources/Hummingbird/Environment.swift +++ b/Sources/Hummingbird/Environment.swift @@ -162,6 +162,9 @@ public struct HBEnvironment: Sendable, Decodable, ExpressibleByDictionaryLiteral switch state { case .readingKey: + // handle empty lines at the end + guard !parser.reachedEnd() else { break } + // check for comment let c = parser.current() if c == "#" { diff --git a/Tests/HummingbirdTests/EnvironmentTests.swift b/Tests/HummingbirdTests/EnvironmentTests.swift index 29c514d0b..a999b58ea 100644 --- a/Tests/HummingbirdTests/EnvironmentTests.swift +++ b/Tests/HummingbirdTests/EnvironmentTests.swift @@ -119,6 +119,17 @@ final class EnvironmentTests: XCTestCase { FOO=BAR #BAZ= + + """ + let result = try HBEnvironment.parseDotEnv(dotenv) + XCTAssertEqual(result["foo"], "BAR") + XCTAssertEqual(result.count, 1) + } + + func testEmptyLineAtEnd() throws { + let dotenv = """ + FOO=BAR + """ let result = try HBEnvironment.parseDotEnv(dotenv) XCTAssertEqual(result["foo"], "BAR")