Skip to content

Commit 7bbd095

Browse files
committed
ctags: filterSketchSource: enlarge buffer size to handle long lines
Fixes arduino/ArduinoCore-zephyr#140
1 parent 11b2625 commit 7bbd095

File tree

1 file changed

+12
-2
lines changed
  • internal/arduino/builder/internal/preprocessor

1 file changed

+12
-2
lines changed

internal/arduino/builder/internal/preprocessor/ctags.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func PreprocessSketchWithCtags(
7474
}
7575

7676
if src, err := ctagsTarget.ReadFile(); err == nil {
77-
filteredSource := filterSketchSource(sketch, bytes.NewReader(src), false)
77+
filteredSource := filterSketchSource(sketch, bytes.NewReader(src), false, stderr)
7878
if err := ctagsTarget.WriteFile([]byte(filteredSource)); err != nil {
7979
return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err
8080
}
@@ -208,7 +208,7 @@ func RunCTags(ctx context.Context, sourceFile *paths.Path, buildProperties *prop
208208
return stdout, stderr, args, err
209209
}
210210

211-
func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarkers bool) string {
211+
func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarkers bool, stderr *bytes.Buffer) string {
212212
fileNames := paths.NewPathList()
213213
fileNames.Add(sketch.MainFile)
214214
fileNames.AddAll(sketch.OtherSketchFiles)
@@ -217,6 +217,11 @@ func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarke
217217
filtered := ""
218218

219219
scanner := bufio.NewScanner(source)
220+
221+
var buf []byte
222+
const maxTokenSize = 1024 * 1024 // 1 MB
223+
scanner.Buffer(buf, maxTokenSize)
224+
220225
for scanner.Scan() {
221226
line := scanner.Text()
222227
if filename := cpp.ParseLineMarker(line); filename != nil {
@@ -230,6 +235,11 @@ func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarke
230235
filtered += line + "\n"
231236
}
232237
}
238+
if scanner.Err() == bufio.ErrTooLong {
239+
fmt.Fprintf(stderr, "%s: %s",
240+
i18n.Tr("An error occurred adding prototypes"),
241+
i18n.Tr("line too long\n"))
242+
}
233243

234244
return filtered
235245
}

0 commit comments

Comments
 (0)