From efbfb630f60f6663deba83ec12c1fbf2f9bab183 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 13 三月 2026 13:44:08 +0800
Subject: [PATCH] fix: improve FilePersistenceService code quality and security
---
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs | 53 +++++++++++++++++++++++++++--------------------------
1 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs
index a406bef..87b670c 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs
@@ -11,11 +11,6 @@
public class TRegion : MemoryRegion, IMemoryRegion
{
/// <summary>
- /// 鏍囪瘑瀵硅薄鏄惁宸茶閲婃斁
- /// </summary>
- private bool _disposed = false;
-
- /// <summary>
/// 鍖哄煙绫诲瀷
/// </summary>
public override string RegionType => "T";
@@ -26,11 +21,24 @@
private const int TimerSize = 2;
/// <summary>
+ /// 瀹氭椂鍣ㄦ暟閲�
+ /// </summary>
+ public int TimerCount => Size / TimerSize;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="timerCount">瀹氭椂鍣ㄦ暟閲�</param>
+ /// <exception cref="ArgumentOutOfRangeException">褰搕imerCount灏忎簬鎴栫瓑浜�0鏃舵姏鍑�</exception>
+ /// <exception cref="OverflowException">褰搕imerCount * TimerSize瓒呭嚭int鑼冨洿鏃舵姏鍑�</exception>
public TRegion(int timerCount) : base(timerCount * TimerSize)
{
+ if (timerCount <= 0)
+ throw new ArgumentOutOfRangeException(nameof(timerCount), "瀹氭椂鍣ㄦ暟閲忓繀椤诲ぇ浜�0");
+
+ // 楠岃瘉娌℃湁婧㈠嚭
+ if (timerCount > Size / TimerSize)
+ throw new OverflowException($"瀹氭椂鍣ㄦ暟閲弡timerCount}杩囧ぇ锛岃秴鍑哄唴瀛橀檺鍒�");
}
/// <summary>
@@ -38,10 +46,15 @@
/// </summary>
/// <param name="timerNumber">瀹氭椂鍣ㄥ彿锛堜粠1寮�濮嬶級</param>
/// <returns>瀹氭椂鍣ㄥ�硷紙姣锛�</returns>
+ /// <exception cref="ArgumentOutOfRangeException">褰搕imerNumber涓�0鎴栬秴鍑哄畾鏃跺櫒鏁伴噺鏃舵姏鍑�</exception>
public ushort ReadTimer(ushort timerNumber)
{
- if (_disposed)
- throw new ObjectDisposedException(nameof(TRegion));
+ if (timerNumber == 0)
+ throw new ArgumentOutOfRangeException(nameof(timerNumber), "瀹氭椂鍣ㄥ彿蹇呴』澶т簬0锛堜粠1寮�濮嬶級");
+
+ if (timerNumber > TimerCount)
+ throw new ArgumentOutOfRangeException(nameof(timerNumber),
+ $"瀹氭椂鍣ㄥ彿{timerNumber}瓒呭嚭鑼冨洿锛屽綋鍓嶅畾鏃跺櫒鎬绘暟涓簕TimerCount}");
ushort offset = (ushort)((timerNumber - 1) * TimerSize);
var data = Read(offset, TimerSize);
@@ -53,31 +66,19 @@
/// </summary>
/// <param name="timerNumber">瀹氭椂鍣ㄥ彿锛堜粠1寮�濮嬶級</param>
/// <param name="value">瀹氭椂鍣ㄥ�硷紙姣锛�</param>
+ /// <exception cref="ArgumentOutOfRangeException">褰搕imerNumber涓�0鎴栬秴鍑哄畾鏃跺櫒鏁伴噺鏃舵姏鍑�</exception>
public void WriteTimer(ushort timerNumber, ushort value)
{
- if (_disposed)
- throw new ObjectDisposedException(nameof(TRegion));
+ if (timerNumber == 0)
+ throw new ArgumentOutOfRangeException(nameof(timerNumber), "瀹氭椂鍣ㄥ彿蹇呴』澶т簬0锛堜粠1寮�濮嬶級");
+
+ if (timerNumber > TimerCount)
+ throw new ArgumentOutOfRangeException(nameof(timerNumber),
+ $"瀹氭椂鍣ㄥ彿{timerNumber}瓒呭嚭鑼冨洿锛屽綋鍓嶅畾鏃跺櫒鎬绘暟涓簕TimerCount}");
ushort offset = (ushort)((timerNumber - 1) * TimerSize);
var data = new byte[] { (byte)(value >> 8), (byte)(value & 0xFF) };
Write(offset, data);
- }
-
- /// <summary>
- /// 閲婃斁璧勬簮
- /// </summary>
- /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
- protected override void Dispose(bool disposing)
- {
- if (!_disposed)
- {
- if (disposing)
- {
- // 閲婃斁鎵樼璧勬簮
- }
- _disposed = true;
- }
- base.Dispose(disposing);
}
}
}
--
Gitblit v1.9.3