mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-23 10:44:21 +01:00
validate file part bounds to prevent panic (#1612)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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{}
|
||||
|
||||
Reference in New Issue
Block a user