From fe7b7976353f585b47aee30fd5bb4c5f9221c086 Mon Sep 17 00:00:00 2001 From: leeway Date: Tue, 8 Feb 2022 18:38:09 +0800 Subject: [PATCH] fix storage may index out of range --- CocoaMQTT.podspec | 4 ++-- CocoaMQTT.xcodeproj/project.pbxproj | 16 ---------------- Example/Example/ChatViewController.swift | 2 +- Source/CocoaMQTTStorage.swift | 13 +++++++++++-- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/CocoaMQTT.podspec b/CocoaMQTT.podspec index 4fe88d7a..bd86836a 100644 --- a/CocoaMQTT.podspec +++ b/CocoaMQTT.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CocoaMQTT" - s.version = "2.0.3-beta2" + s.version = "2.0.3-beta3" s.summary = "MQTT v3.1.1 client library for iOS and OS X written with Swift 5" s.homepage = "https://github.com/emqx/CocoaMQTT" s.license = { :type => "MIT" } @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.ios.deployment_target = "9.0" s.tvos.deployment_target = "10.0" # s.watchos.deployment_target = "2.0" - s.source = { :git => "https://github.com/emqx/CocoaMQTT.git", :tag => "2.0.3-beta2"} + s.source = { :git => "https://github.com/emqx/CocoaMQTT.git", :tag => "2.0.3-beta3"} s.default_subspec = 'Core' s.subspec 'Core' do |ss| diff --git a/CocoaMQTT.xcodeproj/project.pbxproj b/CocoaMQTT.xcodeproj/project.pbxproj index 26dafeb3..043fd03e 100644 --- a/CocoaMQTT.xcodeproj/project.pbxproj +++ b/CocoaMQTT.xcodeproj/project.pbxproj @@ -117,18 +117,12 @@ 9228E8A927610A1000063DF2 /* MqttDecodePubRec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E89327610A1000063DF2 /* MqttDecodePubRec.swift */; }; 9228E8AA27610A1000063DF2 /* MqttDecodePubRec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E89327610A1000063DF2 /* MqttDecodePubRec.swift */; }; 9228E8AB27610A1000063DF2 /* MqttDecodePubRec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E89327610A1000063DF2 /* MqttDecodePubRec.swift */; }; - 9228E8AD27610A2700063DF2 /* FrameSubAck5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8AC27610A2700063DF2 /* FrameSubAck5.swift */; }; - 9228E8AE27610A2700063DF2 /* FrameSubAck5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8AC27610A2700063DF2 /* FrameSubAck5.swift */; }; - 9228E8AF27610A2700063DF2 /* FrameSubAck5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8AC27610A2700063DF2 /* FrameSubAck5.swift */; }; 9228E8B227610A4300063DF2 /* CocoaMQTT5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B027610A4300063DF2 /* CocoaMQTT5.swift */; }; 9228E8B327610A4300063DF2 /* CocoaMQTT5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B027610A4300063DF2 /* CocoaMQTT5.swift */; }; 9228E8B427610A4300063DF2 /* CocoaMQTT5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B027610A4300063DF2 /* CocoaMQTT5.swift */; }; 9228E8B527610A4300063DF2 /* CocoaMQTT5Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B127610A4300063DF2 /* CocoaMQTT5Message.swift */; }; 9228E8B627610A4300063DF2 /* CocoaMQTT5Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B127610A4300063DF2 /* CocoaMQTT5Message.swift */; }; 9228E8B727610A4300063DF2 /* CocoaMQTT5Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B127610A4300063DF2 /* CocoaMQTT5Message.swift */; }; - 9228E8B927610A6600063DF2 /* CocoaMQTTReader5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B827610A6600063DF2 /* CocoaMQTTReader5.swift */; }; - 9228E8BA27610A6600063DF2 /* CocoaMQTTReader5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B827610A6600063DF2 /* CocoaMQTTReader5.swift */; }; - 9228E8BB27610A6600063DF2 /* CocoaMQTTReader5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8B827610A6600063DF2 /* CocoaMQTTReader5.swift */; }; 9228E8BE27610A7B00063DF2 /* MqttSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8BC27610A7B00063DF2 /* MqttSubscription.swift */; }; 9228E8BF27610A7B00063DF2 /* MqttSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8BC27610A7B00063DF2 /* MqttSubscription.swift */; }; 9228E8C027610A7B00063DF2 /* MqttSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9228E8BC27610A7B00063DF2 /* MqttSubscription.swift */; }; @@ -254,10 +248,8 @@ 9228E89127610A1000063DF2 /* MqttDecodePubRel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MqttDecodePubRel.swift; sourceTree = ""; }; 9228E89227610A1000063DF2 /* MqttDecodeUnsubAck.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MqttDecodeUnsubAck.swift; sourceTree = ""; }; 9228E89327610A1000063DF2 /* MqttDecodePubRec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MqttDecodePubRec.swift; sourceTree = ""; }; - 9228E8AC27610A2700063DF2 /* FrameSubAck5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameSubAck5.swift; sourceTree = ""; }; 9228E8B027610A4300063DF2 /* CocoaMQTT5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaMQTT5.swift; sourceTree = ""; }; 9228E8B127610A4300063DF2 /* CocoaMQTT5Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaMQTT5Message.swift; sourceTree = ""; }; - 9228E8B827610A6600063DF2 /* CocoaMQTTReader5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaMQTTReader5.swift; sourceTree = ""; }; 9228E8BC27610A7B00063DF2 /* MqttSubscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MqttSubscription.swift; sourceTree = ""; }; 9228E8BD27610A7B00063DF2 /* MqttPublishProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MqttPublishProperties.swift; sourceTree = ""; }; 9228E8C427610A8500063DF2 /* CocoaMQTTProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaMQTTProperty.swift; sourceTree = ""; }; @@ -353,7 +345,6 @@ 9228E8B127610A4300063DF2 /* CocoaMQTT5Message.swift */, 8225B4D0227B2F2900E4DB51 /* CocoaMQTTDeliver.swift */, 82CF1FAF22943B2100DF539A /* CocoaMQTTReader.swift */, - 9228E8B827610A6600063DF2 /* CocoaMQTTReader5.swift */, 040997791C1B14F0006B5A6D /* Supporting Files */, ); path = Source; @@ -390,7 +381,6 @@ 8D43DE5522FAEDDA00D9A06B /* FramePubComp.swift */, 8D43DE5922FAF37500D9A06B /* FrameSubscribe.swift */, 8D43DE5B22FAF6A400D9A06B /* FrameSubAck.swift */, - 9228E8AC27610A2700063DF2 /* FrameSubAck5.swift */, 8D43DE5D22FAF9E500D9A06B /* FrameUnsubscribe.swift */, 8D43DE5F22FAFC2700D9A06B /* FrameUnsubAck.swift */, 8D43DE6122FAFDA700D9A06B /* FramePingReq.swift */, @@ -667,13 +657,11 @@ 1111249424BB515E00E2DFBC /* Frame.swift in Sources */, 9228E89B27610A1000063DF2 /* MqttDecodeConnAck.swift in Sources */, 1111249524BB515E00E2DFBC /* FrameUnsubscribe.swift in Sources */, - 9228E8AE27610A2700063DF2 /* FrameSubAck5.swift in Sources */, 9228E8BF27610A7B00063DF2 /* MqttSubscription.swift in Sources */, 9228E8A727610A1000063DF2 /* MqttDecodeUnsubAck.swift in Sources */, 1111249624BB515E00E2DFBC /* CocoaMQTTStorage.swift in Sources */, 1111249724BB515E00E2DFBC /* FrameUnsubAck.swift in Sources */, 9228E89E27610A1000063DF2 /* MqttDecodePubComp.swift in Sources */, - 9228E8BA27610A6600063DF2 /* CocoaMQTTReader5.swift in Sources */, 1111249824BB515E00E2DFBC /* CocoaMQTTMessage.swift in Sources */, 1111249924BB515E00E2DFBC /* CocoaMQTTDeliver.swift in Sources */, 1111249A24BB515E00E2DFBC /* CocoaMQTTTimer.swift in Sources */, @@ -718,13 +706,11 @@ 111124BE24BB516300E2DFBC /* Frame.swift in Sources */, 9228E89C27610A1000063DF2 /* MqttDecodeConnAck.swift in Sources */, 111124BF24BB516300E2DFBC /* FrameUnsubscribe.swift in Sources */, - 9228E8AF27610A2700063DF2 /* FrameSubAck5.swift in Sources */, 9228E8C027610A7B00063DF2 /* MqttSubscription.swift in Sources */, 9228E8A827610A1000063DF2 /* MqttDecodeUnsubAck.swift in Sources */, 111124C024BB516300E2DFBC /* CocoaMQTTStorage.swift in Sources */, 111124C124BB516300E2DFBC /* FrameUnsubAck.swift in Sources */, 9228E89F27610A1000063DF2 /* MqttDecodePubComp.swift in Sources */, - 9228E8BB27610A6600063DF2 /* CocoaMQTTReader5.swift in Sources */, 111124C224BB516300E2DFBC /* CocoaMQTTMessage.swift in Sources */, 111124C324BB516300E2DFBC /* CocoaMQTTDeliver.swift in Sources */, 111124C424BB516300E2DFBC /* CocoaMQTTTimer.swift in Sources */, @@ -769,13 +755,11 @@ 8225B53B227C2FC600E4DB51 /* Frame.swift in Sources */, 9228E89A27610A1000063DF2 /* MqttDecodeConnAck.swift in Sources */, 8D43DE5E22FAF9E500D9A06B /* FrameUnsubscribe.swift in Sources */, - 9228E8AD27610A2700063DF2 /* FrameSubAck5.swift in Sources */, 9228E8BE27610A7B00063DF2 /* MqttSubscription.swift in Sources */, 9228E8A627610A1000063DF2 /* MqttDecodeUnsubAck.swift in Sources */, 8D14C7652349BAF5002D959E /* CocoaMQTTStorage.swift in Sources */, 8D43DE6022FAFC2700D9A06B /* FrameUnsubAck.swift in Sources */, 9228E89D27610A1000063DF2 /* MqttDecodePubComp.swift in Sources */, - 9228E8B927610A6600063DF2 /* CocoaMQTTReader5.swift in Sources */, 8225B53C227C2FC600E4DB51 /* CocoaMQTTMessage.swift in Sources */, 8225B53D227C2FC600E4DB51 /* CocoaMQTTDeliver.swift in Sources */, 8225B53E227C2FC600E4DB51 /* CocoaMQTTTimer.swift in Sources */, diff --git a/Example/Example/ChatViewController.swift b/Example/Example/ChatViewController.swift index 9b5d9502..9ebc6b0e 100644 --- a/Example/Example/ChatViewController.swift +++ b/Example/Example/ChatViewController.swift @@ -70,7 +70,7 @@ class ChatViewController: UIViewController { if mqttVersion == "3.1.1" { mqtt!.publish("chat/room/animals/client/" + animal!, withString: message!, qos: .qos1) }else if mqttVersion == "5.0" { - mqtt5!.publish("chat/room/animals/client/" + animal!, withString: message!, qos: .qos1, DUP: false, retained: false, properties: publishProperties) + mqtt5!.publish("chat/room/animals/client/" + animal!, withString: message!, qos: .qos1, DUP: true, retained: false, properties: publishProperties) } messageTextView.text = "" diff --git a/Source/CocoaMQTTStorage.swift b/Source/CocoaMQTTStorage.swift index 8ed2b6ca..84a1567d 100644 --- a/Source/CocoaMQTTStorage.swift +++ b/Source/CocoaMQTTStorage.swift @@ -37,7 +37,7 @@ final class CocoaMQTTStorage: CocoaMQTTStorageProtocol { var versionDefault: UserDefaults = UserDefaults() init?(){ - self.versionDefault = UserDefaults() + versionDefault = UserDefaults() } init?(by clientId: String) { @@ -50,7 +50,13 @@ final class CocoaMQTTStorage: CocoaMQTTStorageProtocol { } deinit { - userDefault.synchronize() + if(userDefault != nil){ + userDefault.synchronize() + } + + if(versionDefault != nil){ + versionDefault.synchronize() + } } func setMQTTVersion(_ version : String){ @@ -112,6 +118,9 @@ final class CocoaMQTTStorage: CocoaMQTTStorageProtocol { } private func parse(_ bytes: [UInt8]) -> (UInt8, [UInt8])? { + guard bytes.count > 5 else { + return nil + } /// bytes 1..<5 may be 'Remaining Length' for i in 1 ..< 5 { if (bytes[i] & 0x80) == 0 {