From 30ead637e22e097d52b9fae4d912703a3fc8e068 Mon Sep 17 00:00:00 2001 From: Tim Van Baak Date: Thu, 20 Feb 2025 21:07:35 -0800 Subject: [PATCH] Switch from Scanner to Reader to avoid Scanner's maximum token size restrictions --- core/execute.go | 15 ++++++++++++--- core/execute_test.go | 12 ++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/core/execute.go b/core/execute.go index f26e793..3b9f22a 100644 --- a/core/execute.go +++ b/core/execute.go @@ -21,9 +21,18 @@ func readPipe( defer func() { done <- 0 }() - scanner := bufio.NewScanner(f) - for scanner.Scan() { - data := scanner.Bytes() + + var data []byte + var err error + reader := bufio.NewReader(f) + for data, err = reader.ReadBytes('\n'); err == nil; data, err = reader.ReadBytes('\n') { + send <- data + } + if err != io.EOF { + log.Printf("error: failed to read pipe: %v", err) + } + // In case the last line has no newline + if len(data) > 0 { send <- data } } diff --git a/core/execute_test.go b/core/execute_test.go index 7a9d99b..0078d26 100644 --- a/core/execute_test.go +++ b/core/execute_test.go @@ -10,7 +10,7 @@ func TestExecute(t *testing.T) { assertLen := func(t *testing.T, items []Item, length int) { t.Helper() if len(items) != length { - t.Fatalf("Expected %d items, got %d", length, len(items)) + t.Errorf("Expected %d items, got %d", length, len(items)) } } assertNil := func(t *testing.T, err error) { @@ -22,7 +22,7 @@ func TestExecute(t *testing.T) { assertNotNil := func(t *testing.T, err error) { t.Helper() if err == nil { - t.Fatal("expected err") + t.Error("expected err") } } execute := func(argv []string) ([]Item, error) { @@ -196,16 +196,16 @@ func TestExecute(t *testing.T) { _, _, errItem, err := Execute("test", argv, nil, nil, "", time.Minute, nil) assertNotNil(t, err) if errItem.Id == "" { - t.Fatal("missing erritem id") + t.Error("missing erritem id") } if errItem.Source != "default" { - t.Fatalf("unexpected erritem source: expected default, got %s", errItem.Source) + t.Errorf("unexpected erritem source: expected default, got %s", errItem.Source) } if !strings.Contains(errItem.Body, "Hello") || !strings.Contains(errItem.Body, "World") { - t.Fatal("missing stderr from erritem") + t.Error("missing stderr from erritem") } if !strings.Contains(errItem.Body, "whoops") { - t.Fatal("missing stdout from erritem") + t.Error("missing stdout from erritem") } }) }