Digital PCT265 defect MVAPCT-271 - Ensure the app doesn't crash on invalid color hex.
This commit is contained in:
parent
806ac9821a
commit
740c3eeb31
@ -44,6 +44,7 @@ public final class Color: Codable {
|
|||||||
|
|
||||||
enum ColorError: Error {
|
enum ColorError: Error {
|
||||||
case badName(reason: String)
|
case badName(reason: String)
|
||||||
|
case invalidHex(reason: String)
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -53,21 +54,21 @@ public final class Color: Codable {
|
|||||||
public init(uiColor: UIColor) {
|
public init(uiColor: UIColor) {
|
||||||
self.uiColor = uiColor
|
self.uiColor = uiColor
|
||||||
hex = UIColor.hexString(for: uiColor) ?? ""
|
hex = UIColor.hexString(for: uiColor) ?? ""
|
||||||
determineRGBA()
|
try? determineRGBA()
|
||||||
}
|
}
|
||||||
|
|
||||||
public init?(uiColor: UIColor?) {
|
public init?(uiColor: UIColor?) {
|
||||||
guard let uiColor = uiColor else { return nil }
|
guard let uiColor = uiColor else { return nil }
|
||||||
self.uiColor = uiColor
|
self.uiColor = uiColor
|
||||||
hex = UIColor.hexString(for: uiColor) ?? ""
|
hex = UIColor.hexString(for: uiColor) ?? ""
|
||||||
determineRGBA()
|
try? determineRGBA()
|
||||||
}
|
}
|
||||||
|
|
||||||
init?(name: String) {
|
init?(name: String) {
|
||||||
guard let colorTuple = UIColor.names[name] else { return nil }
|
guard let colorTuple = UIColor.names[name] else { return nil }
|
||||||
self.uiColor = colorTuple.uiColor
|
self.uiColor = colorTuple.uiColor
|
||||||
self.hex = colorTuple.hex
|
self.hex = colorTuple.hex
|
||||||
determineRGBA()
|
try? determineRGBA()
|
||||||
}
|
}
|
||||||
|
|
||||||
public init?(colorString: String) throws {
|
public init?(colorString: String) throws {
|
||||||
@ -75,7 +76,7 @@ public final class Color: Codable {
|
|||||||
self.uiColor = components.color
|
self.uiColor = components.color
|
||||||
hex = components.hex
|
hex = components.hex
|
||||||
name = components.name ?? ""
|
name = components.name ?? ""
|
||||||
determineRGBA()
|
try determineRGBA()
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -99,7 +100,7 @@ public final class Color: Codable {
|
|||||||
name = components.name ?? ""
|
name = components.name ?? ""
|
||||||
}
|
}
|
||||||
|
|
||||||
determineRGBA()
|
try determineRGBA()
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode(to encoder: Encoder) throws {
|
public func encode(to encoder: Encoder) throws {
|
||||||
@ -135,9 +136,12 @@ public final class Color: Codable {
|
|||||||
return CGFloat(Int(hex[start..<end], radix: 16) ?? 0)
|
return CGFloat(Int(hex[start..<end], radix: 16) ?? 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func determineRGBA() {
|
private func determineRGBA() throws {
|
||||||
|
|
||||||
guard !hex.isEmpty else { return }
|
guard !hex.isEmpty else { return }
|
||||||
|
guard hex.count > 6 else {
|
||||||
|
throw ColorError.invalidHex(reason: "Invalid hex: \(hex)")
|
||||||
|
}
|
||||||
|
|
||||||
let redStart = hex.startIndex
|
let redStart = hex.startIndex
|
||||||
let redEnd = hex.index(redStart, offsetBy: 2)
|
let redEnd = hex.index(redStart, offsetBy: 2)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user