SpamSieve 3.2.2
SpamSieve 3.2.2 is a maintenance release of my Mac e-mail spam filter.
SpamSieve 3.2 had a bunch of changes to deal with Microsoft’s plan to sunset Legacy Outlook on November 1, however in early October they announced a new plan to keep supporting Legacy Outlook for another year. I think this was the right decision, because New Outlook is still missing a lot, but it’s frustrating that the change came so late. I can only assume that they started getting customer feedback as the preview builds rolled out and took people by surprise, breaking their workflows.
AppleScript issues continue. Over the last month or so, a small number of customers have been getting error -1751 (
errOSAlnvalidlD) on macOS Tahoe and on later builds of Sequoia. Something seems to be getting messed up inside AppleScript so that anNSAppleScriptcannot be run more than once. (The error is occurring before the first line of AppleScript is being executed, so it’s not due to events being sent by the script itself.) I added a way to work around this by turning off SpamSieve’s reuse ofNSAppleScriptobjects.SpamSieve 3.2.1 worked around a problem with AppleScript timeouts and POP accounts on macOS Tahoe. A small percentage of customers are seeing a similar issue with IMAP accounts on Tahoe, so I’ve added a workaround for that, too.
Some customers are seeing crashes in
AEDeterminePermissionToAutomateTarget(). The point of using that was to improve the user experience, but I’ve now added a way to disable it because it’s better to have a confusing error message (in the event of no automation access) than a crash on launch. (This API also has a hanging problem, as previously discussed.)Some pathological message data and an inefficient regex could combine to cause hangs when parsing a message. I fixed this by optimizing the regex. I don’t think there are any other patterns that could cause this, no matter the data, but just in case I added a timeout for regex matches. (Alas, this feature of
NSRegularExpressiondoes not seem to have made it into Swift Regex.)I’ve previously written that
StringProtocolhad switched from ICU regular expressions to Swift Regex. However, I’ve now seen several cases where, based on stack traces,StringProtocol.range<A>(of:options:range:locale:)seems to be using both. I have not been able to find the source for this method. It doesn’t seem to be in the core or in FoundationEssentials. TheSubstringimplementation seems to only use Swift Regex.I’m seeing some cases where on Tahoe
NSWorkspace.shared.menuBarOwningApplicationdoesn’t match the app name shown in the menu bar.With SpamSieve 3.2.1, I mentioned a performance issue due to eager Swift bridging of
_NSCallStackArray. I’ve now made all my processing of this array lazy (using Objective-C subclasses) so that it can be collected in more places without slowing things down when it’s not actually used. Note that it does not seem to be possible to subclassNSArrayfrom Swift.
Previously: