diff --git a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart index 249c884c..6203045a 100644 --- a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart +++ b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart @@ -161,24 +161,52 @@ class LockEscalationLogic extends BaseGetXController { // 检查文件头 Future getHeadFile(Uint8List data) async { + if (data.length <= 16) { + showToast('错误D固件,请选择正确的文件'); + return null; + } // 检查文件头 - String header = utf8.decode(data.sublist(0, 12)); + String header; + try { + header = utf8.decode(data.sublist(0, 12)); + } catch (e) { + showToast('非SYD固件,请选择正确的文件'); + return null; + } if (header != 'SYD-BIN-DATA') { showToast('非SYD固件,请选择正确的文件'); return null; } // 解析元数据长度 - Uint8List metaLenList = data.sublist(12, 16); - int metaLen = ByteData.sublistView(metaLenList).getUint32(0); + Uint8List metaLenList; + int metaLen; + try { + metaLenList = data.sublist(12, 16); + metaLen = ByteData.sublistView(metaLenList).getUint32(0); + } catch (e) { + showToast('文件校验失败 0x01'); + return null; + } if (metaLen < 2 || metaLen > 10240) { showToast('文件校验失败 0x01'); return null; } // 读取和解析元数据 - Uint8List metaStrList = data.sublist(16, 16 + metaLen); - String metaStr = utf8.decode(metaStrList); + Uint8List metaStrList; + String metaStr; + try { + metaStrList = data.sublist(16, 16 + metaLen); + metaStr = utf8.decode(metaStrList); + } catch (e) { + showToast('解析元数据失败,请选择正确的文件'); + return null; + } AppLog.log(metaStr); var meta = jsonDecode(metaStr); + if (meta is! Map) { + showToast('解析元数据失败,请选择正确的文件'); + return null; + } return meta..['metaLen'] = metaLen; }