ReHighlightStates: sanity-check startline value (#3237)

Check if startline value is valid before passing it to input.State(),
to prevent a theoretically possible race when the number of lines
changes in the meantime, causing an out of bounds access.

Actually this race cannot happen: ReHighlightStates() is only called
from the main goroutine, and the line array is modified, again, only by
the main goroutine. So for now this change is rather cosmetic: it is
just to make the highligher API implementation self-sufficiently safe
without assumptions about which goroutines are using which API functions
and how.
This commit is contained in:
Dmytro Maluka 2024-04-09 00:31:01 +02:00 committed by GitHub
parent d1d38d1ed7
commit acb0d763df
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -363,7 +363,9 @@ func (h *Highlighter) ReHighlightStates(input LineStates, startline int) int {
h.lastRegion = nil
if startline > 0 {
input.Lock()
h.lastRegion = input.State(startline - 1)
if startline-1 < input.LinesNum() {
h.lastRegion = input.State(startline - 1)
}
input.Unlock()
}
for i := startline; ; i++ {