fix(cli): guard min-time overflow + normalize 0 exec-timeout to null + stale comment (#54 review)

This commit is contained in:
Joseph Doherty
2026-06-19 03:24:11 -04:00
parent 597d664a53
commit e3b83f8561
4 changed files with 41 additions and 4 deletions
@@ -395,6 +395,14 @@ public static class TemplateCommands
return false;
}
// Guard against overflow: reject if amount * factorMs would exceed TimeSpan.MaxValue (in ms).
// The divide is safe because factorMs is always >= 1.
if (amount > TimeSpan.MaxValue.TotalMilliseconds / factorMs)
{
error = $"Invalid --min-time-between-runs '{value}': value is too large.";
return false;
}
// 0 (with or without a unit) → unset, mirroring DurationInput.Compose's non-positive handling.
duration = amount == 0 ? null : TimeSpan.FromMilliseconds(amount * factorMs);
return true;
@@ -2067,8 +2067,7 @@
_scriptParameters = script.ParameterDefinitions;
_scriptReturn = script.ReturnDefinition;
_scriptIsLocked = script.IsLocked;
// Preserve any timeout set via Transport import — the UI has no authoring
// control for this field, so we round-trip the loaded value unchanged.
// Load the per-script execution timeout into the authoring input (null = use site default).
_scriptExecutionTimeoutSeconds = script.ExecutionTimeoutSeconds;
_scriptModalTab = "trigger";
ResetScriptTestRun();
@@ -2172,7 +2172,7 @@ public class ManagementActor : ReceiveActor
ParameterDefinitions = cmd.ParameterDefinitions,
ReturnDefinition = cmd.ReturnDefinition,
MinTimeBetweenRuns = cmd.MinTimeBetweenRuns,
ExecutionTimeoutSeconds = cmd.ExecutionTimeoutSeconds
ExecutionTimeoutSeconds = cmd.ExecutionTimeoutSeconds is > 0 ? cmd.ExecutionTimeoutSeconds : null
};
var result = await svc.AddScriptAsync(cmd.TemplateId, script, user);
return result.IsSuccess ? result.Value : throw new ManagementCommandException(result.Error);
@@ -2189,7 +2189,7 @@ public class ManagementActor : ReceiveActor
ParameterDefinitions = cmd.ParameterDefinitions,
ReturnDefinition = cmd.ReturnDefinition,
MinTimeBetweenRuns = cmd.MinTimeBetweenRuns,
ExecutionTimeoutSeconds = cmd.ExecutionTimeoutSeconds
ExecutionTimeoutSeconds = cmd.ExecutionTimeoutSeconds is > 0 ? cmd.ExecutionTimeoutSeconds : null
};
var result = await svc.UpdateScriptAsync(cmd.ScriptId, script, user);
return result.IsSuccess ? result.Value : throw new ManagementCommandException(result.Error);