Skip to content

Commit 382974e

Browse files
sichanyooSichan Yoo
andauthored
fix: Add region validation to endpoint resolver middleware (#2048)
Co-authored-by: Sichan Yoo <[email protected]>
1 parent 99b3602 commit 382974e

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

Sources/Core/AWSClientRuntime/Sources/AWSClientRuntime/Endpoints/EndpointResolverMiddleware.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import struct ClientRuntime.DefaultEndpointsAuthSchemeResolver
1717
import enum ClientRuntime.EndpointsAuthScheme
1818
import protocol ClientRuntime.EndpointsAuthSchemeResolver
1919
import protocol ClientRuntime.EndpointsRequestContextProviding
20+
import enum Smithy.ClientError
21+
#if os(Linux)
22+
import Foundation
23+
#endif
2024

2125
@_spi(AWSEndpointResolverMiddleware)
2226
public struct AWSEndpointResolverMiddleware<OperationStackOutput, Params: EndpointsRequestContextProviding> {
@@ -37,12 +41,21 @@ public struct AWSEndpointResolverMiddleware<OperationStackOutput, Params: Endpoi
3741
}
3842

3943
extension AWSEndpointResolverMiddleware: ApplyEndpoint {
44+
func isValidRegion(_ input: String) -> Bool {
45+
let pattern = "^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$"
46+
return input.range(of: pattern, options: .regularExpression) != nil
47+
}
4048

4149
public func apply(
4250
request: SmithyHTTPAPI.HTTPRequest,
4351
selectedAuthScheme: SelectedAuthScheme?,
4452
attributes: Smithy.Context
4553
) async throws -> SmithyHTTPAPI.HTTPRequest {
54+
// Validate region.
55+
guard isValidRegion(attributes.getRegion() ?? "") else {
56+
throw ClientError.invalidValue("Invalid region: \(attributes.getRegion() ?? "")")
57+
}
58+
4659
let builder = request.toBuilder()
4760

4861
let endpoint = try resolverBlock(paramsBlock(attributes))

0 commit comments

Comments
 (0)