From 36fe8dfa7f2010bde99f2dbcc035e3b6a7ef7bf4 Mon Sep 17 00:00:00 2001 From: Sangbum Kim Date: Tue, 4 Mar 2025 21:38:19 +0900 Subject: [PATCH] applied fix from See https://go-review.googlesource.com/c/go/+/653676. --- strutil/chunk.go | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/strutil/chunk.go b/strutil/chunk.go index 1407e97..b885616 100644 --- a/strutil/chunk.go +++ b/strutil/chunk.go @@ -29,26 +29,32 @@ func (l *LineBreaker) Write(b []byte) (n int, err error) { return len(b), nil } - _, err = l.Out.Write(l.line[0:l.used]) - if err != nil { - return - } - excess := pemLineLength - l.used - l.used = 0 - - n, err = l.Out.Write(b[0:excess]) - if err != nil { - return - } - - _, err = l.Out.Write(nl) + _, err = l.Out.Write(l.line[0:l.used:l.used]) if err != nil { return } + brk := pemLineLength - l.used var nn int - nn, err = l.Write(b[excess:]) - return n + nn, err + for len(b) >= brk { + nn, err = l.Out.Write(b[0:brk:brk]) + n += nn + if err != nil { + return + } + + _, err = l.Out.Write(nl) + if err != nil { + return + } + b = b[brk:] + brk = pemLineLength + } + + l.used = len(b) + copy(l.line[:], b) + n += len(b) + return } // Close flushes any pending output from the writer.