From 24acbd65d03f550ff50aec28bfb12706d023ff90 Mon Sep 17 00:00:00 2001 From: Dmitriy Borovikov Date: Fri, 16 Feb 2024 23:43:10 +0300 Subject: [PATCH] Fix unaligned access bug. --- Plugins/Msg2swiftCmdPlugin/plugin.swift | 20 ++++++++++++++++++++ Sources/CDRCodable/Decoder/CDRDecoder.swift | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 Plugins/Msg2swiftCmdPlugin/plugin.swift diff --git a/Plugins/Msg2swiftCmdPlugin/plugin.swift b/Plugins/Msg2swiftCmdPlugin/plugin.swift new file mode 100644 index 0000000..0ad4ee8 --- /dev/null +++ b/Plugins/Msg2swiftCmdPlugin/plugin.swift @@ -0,0 +1,20 @@ +import PackagePlugin +import Foundation + +@main +struct Msg2swiftCmdPlugin: CommandPlugin { + func performCommand(context: PluginContext, arguments: [String]) throws { + let uicTool = try context.tool(named: "msg2swift").path + let process = try Process.run(URL(fileURLWithPath: uicTool.string), arguments: arguments) + process.waitUntilExit() + + guard + process.terminationReason == .exit, + process.terminationStatus == 0 + else { + let problem = "\(process.terminationReason):\(process.terminationStatus)" + Diagnostics.error("msg2swift invocation failed: \(problem)") + return + } + } +} diff --git a/Sources/CDRCodable/Decoder/CDRDecoder.swift b/Sources/CDRCodable/Decoder/CDRDecoder.swift index 8904a5f..8ea85e3 100644 --- a/Sources/CDRCodable/Decoder/CDRDecoder.swift +++ b/Sources/CDRCodable/Decoder/CDRDecoder.swift @@ -141,7 +141,7 @@ extension DataStore { defer { cursor = cursor.advanced(by: stride) } - return data.withUnsafeBytes{ $0.load(fromByteOffset: cursor - beginIndex, as: T.self) } + return data.withUnsafeBytes{ $0.loadUnaligned(fromByteOffset: cursor - beginIndex, as: T.self) } } @inline(__always)