         validBufferBytes = readCount + moveCount
     }
 
+    @usableFromInline
+    func retryRow(
+        cellArray: inout [CSVCell], row: Int, lineStart: Int
+    ) throws -> Bool {
+        // If the line started at 0, we've already attempted to re-load,
+        // so throw an error.
+        if lineStart == 0 {
+            throw CSVProcessorErrors.rowTooLarge(row: row)
+        }
+        // Extend the array.
+        try fetchNewData(lineStart: lineStart)
+        offset = 0
+        return try parseRow(
+            cellArray: &cellArray,
+            row: row)
+    }
+
     public let metadata: CSVGuess
 
     @usableFromInline

        let lineStart = offset  
        rowLoop: while true {
            let cellStart = offset
            // Note: we leverage the fact that all our known delimiters are
            // ASCII, and so we can use single byte patterns.
            let first = Unicode.Scalar(buffer[offset])

                    validBufferBytes = 0
                    return true
                }
                return try retryRow(cellArray: &cellArray, row: row, lineStart: lineStart)
            }
        }
    }
