@@ -95,13 +95,19 @@ extension EmailAddress {
9595public typealias DomainTypealias = Domain
9696extension EmailAddress {
9797 /// The domain part (after @)
98+ ///
99+ /// - Note: Uses `try!` for RFC format conversions because EmailAddress initialization
100+ /// ensures all RFC variants contain valid, compatible domains. Converting from an already-validated
101+ /// RFC 5322 or RFC 6531 domain to RFC 1123 format cannot fail since validation occurred during init.
98102 public var domain : _Domain {
99103 if let domain = rfc5321? . domain {
100104 return . init( rfc5321: domain)
101105 }
102106 if let domain = rfc5322? . domain {
107+ // Safe: RFC 5322 domain was validated during EmailAddress init
103108 return try ! . init( rfc1123: domain)
104109 }
110+ // Safe: RFC 6531 domain was validated during EmailAddress init
105111 return try ! . init( rfc1123: rfc6531. domain)
106112 }
107113
@@ -121,15 +127,21 @@ extension EmailAddress {
121127 /// Returns a normalized version of the email address
122128 /// - For ASCII addresses, uses the most restrictive format available (5321 > 5322 > 6531)
123129 /// - For international addresses, uses RFC 6531
130+ ///
131+ /// - Note: Uses `try!` when reconstructing EmailAddress from already-validated RFC formats.
132+ /// Since these RFC variants were validated during the original EmailAddress initialization,
133+ /// recreating an EmailAddress from them is guaranteed to succeed.
124134 public func normalized( ) -> EmailAddress {
125135 // Already normalized if we only have RFC 6531
126136 guard isASCII else { return self }
127137
128138 // Use most restrictive format available
129139 if let rfc5321 = self . rfc5321 {
140+ // Safe: Reconstructing from already-validated RFC 5321 format
130141 return try ! EmailAddress ( rfc5321: rfc5321)
131142 }
132143 if let rfc5322 = self . rfc5322 {
144+ // Safe: Reconstructing from already-validated RFC 5322 format
133145 return try ! EmailAddress ( rfc5322: rfc5322)
134146 }
135147 return self
0 commit comments