diff --git a/Shared/FuelPriceProvider.swift b/Shared/FuelPriceProvider.swift index 09c4b05..320fbaf 100644 --- a/Shared/FuelPriceProvider.swift +++ b/Shared/FuelPriceProvider.swift @@ -84,11 +84,15 @@ private struct RelayResponse: Codable { let prices: [String: Double]? /// Map relay grade keys (E5/E10/DIESEL) to FuelType for ALL fuels the - /// station sells — one fetch populates every fuel tab. + /// station sells — one fetch populates every fuel tab. Defensive guard: + /// any grade outside the 50–500 pence/litre band is dropped, so a relay + /// regression (e.g. the band being removed server-side) can't re-poison + /// the nationwide cheapest reference with 1.3p / 1589p garbage. var allPrices: [FuelType: Double] { var result: [FuelType: Double] = [:] if let prices { for (grade, value) in prices { + guard (50...500).contains(value) else { continue } switch grade.uppercased() { case "E10": result[.e10] = value case "E5": result[.e5] = value @@ -98,7 +102,7 @@ private struct RelayResponse: Codable { } } // Backwards-compat: relay versions without `prices` still send `price`. - if result.isEmpty, let price { + if result.isEmpty, let price, (50...500).contains(price) { result[.e10] = price } return result