File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11package history
22
33import (
4- "bufio"
54 "encoding/json"
5+ "io"
66 "os"
77 "path/filepath"
88 "slices"
@@ -215,24 +215,18 @@ func (h *History) load() error {
215215 defer f .Close ()
216216
217217 var all []string
218- scanner := bufio .NewScanner (f )
219- for scanner .Scan () {
220- line := scanner .Text ()
221- if line == "" {
222- continue
223- }
224-
218+ dec := json .NewDecoder (f )
219+ for {
225220 var message string
226- if err := json .Unmarshal ([]byte (line ), & message ); err != nil {
221+ if err := dec .Decode (& message ); err != nil {
222+ if err == io .EOF {
223+ break
224+ }
227225 continue
228226 }
229227 all = append (all , message )
230228 }
231229
232- if err := scanner .Err (); err != nil {
233- return err
234- }
235-
236230 // Deduplicate keeping the latest occurrence of each message
237231 seen := make (map [string ]bool )
238232 for i := len (all ) - 1 ; i >= 0 ; i -- {
Original file line number Diff line number Diff line change @@ -417,3 +417,28 @@ func TestHistory_SetCurrent(t *testing.T) {
417417 h .SetCurrent (2 )
418418 assert .Empty (t , h .Next ())
419419}
420+
421+ func TestHistory_VeryLongMessage (t * testing.T ) {
422+ tmpDir := t .TempDir ()
423+
424+ h , err := New (WithBaseDir (tmpDir ))
425+ require .NoError (t , err )
426+
427+ // Create a message longer than bufio.Scanner's default 64KB limit
428+ longMessage := make ([]byte , 100 * 1024 ) // 100KB
429+ for i := range longMessage {
430+ longMessage [i ] = 'a' + byte (i % 26 )
431+ }
432+ longStr := string (longMessage )
433+
434+ require .NoError (t , h .Add (longStr ))
435+ require .NoError (t , h .Add ("short message after" ))
436+
437+ // Reload history from disk
438+ h2 , err := New (WithBaseDir (tmpDir ))
439+ require .NoError (t , err )
440+
441+ require .Len (t , h2 .Messages , 2 )
442+ assert .Equal (t , longStr , h2 .Messages [0 ])
443+ assert .Equal (t , "short message after" , h2 .Messages [1 ])
444+ }
You can’t perform that action at this time.
0 commit comments