Fix panic in buildx debug when solving fails

Closes #3822

Signed-off-by: Mateusz Gozdek <mgozdek@microsoft.com>
This commit is contained in:
Mateusz Gozdek
2026-05-04 15:49:45 +02:00
parent f1b60d2003
commit 142cd448de
+13 -5
View File
@@ -220,16 +220,24 @@ func containerConfigFromError(solveErr *errdefs.SolveError, cfg *InvokeConfig) (
if err != nil {
return nil, err
}
// When a solve fails before its inputs/mounts have been resolved (for
// example, when computing the cache key for an exec op fails because an
// input source cannot be found), MountIDs/InputIDs may be empty or shorter
// than the declared mount list. Guard against that so callers (such as the
// debug adapter) get a clean error instead of an index-out-of-range panic.
ids := solveErr.MountIDs
if cfg.Initial {
ids = solveErr.InputIDs
}
if len(ids) < len(exec.Mounts) {
return nil, errors.Errorf("cannot start debug container: failing step has no mount results available (got %d of %d)", len(ids), len(exec.Mounts))
}
var mounts []gateway.Mount
for i, mnt := range exec.Mounts {
rid := solveErr.MountIDs[i]
if cfg.Initial {
rid = solveErr.InputIDs[i]
}
mounts = append(mounts, gateway.Mount{
Selector: mnt.Selector,
Dest: mnt.Dest,
ResultID: rid,
ResultID: ids[i],
Readonly: mnt.Readonly,
MountType: mnt.MountType,
CacheOpt: mnt.CacheOpt,