validate file part bounds to prevent panic (#1612)

This commit is contained in:
Omar Shaarawi
2025-08-05 05:18:50 -05:00
committed by GitHub
parent 51498c8de4
commit 58e889796c
2 changed files with 15 additions and 5 deletions

View File

@@ -221,22 +221,31 @@ func renderText(
lastEnd := int64(0)
// Apply highlighting to filenames and base style to rest of text
textLen := int64(len(text))
for _, filePart := range fileParts {
highlight := base.Foreground(t.Secondary())
start, end := filePart.Source.Text.Start, filePart.Source.Text.End
if end > textLen {
end = textLen
}
if start > textLen {
start = textLen
}
if start > lastEnd {
result.WriteString(base.Render(text[lastEnd:start]))
}
result.WriteString(highlight.Render(text[start:end]))
if start < end {
result.WriteString(highlight.Render(text[start:end]))
}
lastEnd = end
}
if lastEnd < int64(len(text)) {
if lastEnd < textLen {
result.WriteString(base.Render(text[lastEnd:]))
}
content = base.Width(width - 6).Render(result.String())
}
@@ -244,7 +253,6 @@ func renderText(
Local().
Format("02 Jan 2006 03:04 PM")
if time.Now().Format("02 Jan 2006") == timestamp[:11] {
// don't show the date if it's today
timestamp = timestamp[12:]
}
info := fmt.Sprintf("%s (%s)", author, timestamp)

View File

@@ -303,7 +303,9 @@ func (m *messagesComponent) renderView() tea.Cmd {
for _, part := range remainingParts {
switch part := part.(type) {
case opencode.FilePart:
fileParts = append(fileParts, part)
if part.Source.Text.Start >= 0 && part.Source.Text.End >= part.Source.Text.Start {
fileParts = append(fileParts, part)
}
}
}
flexItems := []layout.FlexItem{}