service: Avoid underflow in logs padding calculation

This command inserts a variable amount of padding in the log line:

    padding := strings.Repeat(" ", f.padding-getMaxLength(task.Slot))

If the service is scaled up, or the slot numbers are noncontiguous, the
subtraction can underflow, causing a crash.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
Aaron Lehmann 2017-05-16 12:27:31 -07:00
parent a2225276af
commit ab6bc5dce6
1 changed files with 6 additions and 2 deletions

View File

@ -204,8 +204,12 @@ func (f *taskFormatter) format(ctx context.Context, logCtx logContext) (string,
}
}
padding := strings.Repeat(" ", f.padding-getMaxLength(task.Slot))
formatted := fmt.Sprintf("%s@%s%s", taskName, nodeName, padding)
paddingCount := f.padding - getMaxLength(task.Slot)
padding := ""
if paddingCount > 0 {
padding = strings.Repeat(" ", paddingCount)
}
formatted := taskName + "@" + nodeName + padding
f.cache[logCtx] = formatted
return formatted, nil
}