From 0e0bbd3fdb4225dd433b85834ea1abbb41bae4b1 Mon Sep 17 00:00:00 2001 From: jamesread Date: Mon, 26 Jan 2026 00:34:39 +0000 Subject: [PATCH] fix: Nil binding on entity logs caused a NPE --- service/internal/api/api.go | 4 ++-- service/internal/executor/executor.go | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/service/internal/api/api.go b/service/internal/api/api.go index 6e4cbf1..f941028 100644 --- a/service/internal/api/api.go +++ b/service/internal/api/api.go @@ -307,11 +307,11 @@ func (api *oliveTinAPI) internalLogEntryToPb(logEntry *executor.InternalLogEntry ExecutionStarted: logEntry.ExecutionStarted, ExecutionFinished: logEntry.ExecutionFinished, User: logEntry.Username, - BindingId: logEntry.Binding.ID, + BindingId: logEntry.GetBindingId(), DatetimeRateLimitExpires: calculateRateLimitExpires(api, logEntry), } - if !pble.ExecutionFinished { + if !pble.ExecutionFinished && logEntry.Binding != nil && logEntry.Binding.Action != nil { pble.CanKill = acl.IsAllowedKill(api.cfg, authenticatedUser, logEntry.Binding.Action) } diff --git a/service/internal/executor/executor.go b/service/internal/executor/executor.go index 21f862b..b083e67 100644 --- a/service/internal/executor/executor.go +++ b/service/internal/executor/executor.go @@ -111,6 +111,15 @@ type InternalLogEntry struct { ActionIcon string } +// .Binding can be nil, so we need to handle that. +func (e *InternalLogEntry) GetBindingId() string { + if e.Binding == nil { + return "" + } + + return e.Binding.ID +} + type executorStepFunc func(*ExecutionRequest) bool // DefaultExecutor returns an Executor, with a sensible "chain of command" for