diff --git a/Duplicati/Library/Modules/Builtin/RemoteSynchronizationModule.cs b/Duplicati/Library/Modules/Builtin/RemoteSynchronizationModule.cs
index 24a7609d9..a572df62a 100644
--- a/Duplicati/Library/Modules/Builtin/RemoteSynchronizationModule.cs
+++ b/Duplicati/Library/Modules/Builtin/RemoteSynchronizationModule.cs
@@ -331,6 +331,13 @@ public class RemoteSynchronizationModule : IGenericCallbackModule
/// The index of the destination.
private void RecordSyncOperation(int index)
{
+ // Validate index
+ if (index < 0 || index >= m_destinations.Count)
+ {
+ Logging.Log.WriteWarningMessage(LOGTAG, "RemoteSyncRecordInvalidIndex", null, "Cannot record remote synchronization operation: invalid index {0}.", index);
+ return;
+ }
+
if (!m_options.TryGetValue("dbpath", out var dbpath) || string.IsNullOrWhiteSpace(dbpath))
return;
diff --git a/Duplicati/UnitTest/RemoteSynchronizationModuleTests.cs b/Duplicati/UnitTest/RemoteSynchronizationModuleTests.cs
index 86d4fb358..1d3535ff4 100644
--- a/Duplicati/UnitTest/RemoteSynchronizationModuleTests.cs
+++ b/Duplicati/UnitTest/RemoteSynchronizationModuleTests.cs
@@ -889,6 +889,7 @@ namespace Duplicati.UnitTest
[Category("RemoteSync")]
public void TestRecordSyncOperation_WithDifferentIndex()
{
+ // Incorrect index should not record, but throw a warning.
var module = new RemoteSynchronizationModule();
var options = new Dictionary
{
@@ -910,7 +911,7 @@ namespace Duplicati.UnitTest
WHERE ""Description"" = 'Rsync 2'
";
var count = (long)cmd.ExecuteScalar();
- Assert.AreEqual(1, count);
+ Assert.AreEqual(0, count);
}
[Test]