Skip to content

Tech debt

The proxy's most serious defect is a call site that silently converts every failure — including a genuine service outage — into the same "unmatched" outcome a caller sees for a bad address. No call site sets a timeout, retry policy, or cancellation, and the plain-HTTP endpoint sends Windows credentials unencrypted.

CRITICAL

Finding Component Impact Recommended action
CleanAddress catches System.Exception and converts every failure — transport, fault, or deserialization — into return code -999 ("unmatched"), with nothing logged CleanAddressService.CleanAddress (Services/SAIF.Services/Utilities/CleanAddress/CleanAddressService.cs:62-66) Callers cannot distinguish a service outage from a genuinely unmatched address; failures are invisible Log the exception and consider a distinct sentinel or rethrow for transport/service failures
The endpoint is plain HTTP and negotiates the process's Windows identity unencrypted Services/SAIF.Services/Utilities/CleanAddress/CleanAddressServiceBase.cs:20-21; Services/SAIF.Services/Properties/Settings.Designer.cs:29 Address data and Windows credentials cross the network unencrypted Move the endpoint to HTTPS

HIGH

Finding Component Impact Recommended action
No timeout is set anywhere; the WebClientProtocol default of 100,000 ms applies Services/SAIF.Services/Utilities/CleanAddress/CleanAddressServiceBase.cs:18-22 A hung remote call can block a caller for up to 100 seconds Set an explicit Timeout
No retry and no cancellation exist at any call site Services/SAIF.Services/Utilities/CleanAddress/*.cs Every transient failure is absorbed entirely by the consumer, if it is handled at all Add a bounded retry policy where appropriate
ConvertToProperCase, FindCityStateInfoByZip, and RunCleanAddressBatch have no local exception handling CleanAddressService.cs:23; AddressSearchService.cs:21; CleanAddressBatchService.cs:20 Raw SoapException / WebException propagates to the caller Decide and document an explicit failure contract
No production code in this repository constructs any of the three adapters; the only construction is in live-network unit tests Tests/SAIF.Services.Tests/Utilities/WhenCleansingAddress.cs; WhenSearchingAddress.cs The generated proxy, its adapters, and their business logic are compiled and shipped but unexercised inside this repository Confirm whether an external consumer of SAIF.SAIFCode.Core actually uses these types
FindCityStateInfoByZip parsing assumes outResultsCount * 55 fits inside outResults; a shorter string throws ArgumentOutOfRangeException AddressSearchService.cs:32-34 An unexpected response shape crashes the caller Bounds-check before slicing the fixed-width buffer
RunCleanAddressBatch's owning class is marked unsupported by its own author CleanAddressBatchService.cs:7-9 The batch path is carried but explicitly disclaimed Confirm whether this path is still needed

Sources

  • Services/SAIF.Services/Utilities/CleanAddress/CleanAddressService.cs
  • Services/SAIF.Services/Utilities/CleanAddress/CleanAddressServiceBase.cs
  • Services/SAIF.Services/Utilities/CleanAddress/AddressSearchService.cs
  • Services/SAIF.Services/Utilities/CleanAddress/CleanAddressBatchService.cs
  • Services/SAIF.Services/Properties/Settings.Designer.cs
  • Tests/SAIF.Services.Tests/Utilities/WhenCleansingAddress.cs
  • Tests/SAIF.Services.Tests/Utilities/WhenSearchingAddress.cs