From 6133bb6979684ac1f33e4c34826d5f414ed9b014 Mon Sep 17 00:00:00 2001 From: Thomas Boucher Date: Wed, 18 Jun 2025 11:50:31 +0200 Subject: [PATCH] Avoid allocating objects for invalid fields when no "bad data" callback defined. --- src/CsvHelper/CsvParser.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/CsvHelper/CsvParser.cs b/src/CsvHelper/CsvParser.cs index 83ad97b22..495ce8475 100644 --- a/src/CsvHelper/CsvParser.cs +++ b/src/CsvHelper/CsvParser.cs @@ -944,8 +944,13 @@ protected ProcessedField ProcessRFC4180BadField(int start, int length) { // If field is already known to be bad, different rules can be applied. - var args = new BadDataFoundArgs(new string(buffer, start, length), RawRecord, Context); - badDataFound?.Invoke(args); + if (badDataFound is not null) + { + // Note on performance: accessing RawRecord allocates a new string with the entire row. + // It can be costly overall when lots of fields are invalid. + var args = new BadDataFoundArgs(new string(buffer, start, length), RawRecord, Context); + badDataFound.Invoke(args); + } var newStart = start; var newLength = length;