Skip to content

Commit 33b1645

Browse files
committed
gzhttp: Use strings for randomJitter to skip a copy
1 parent 3588812 commit 33b1645

File tree

4 files changed

+23
-45
lines changed

4 files changed

+23
-45
lines changed

gzhttp/compress.go

+5-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package gzhttp
22

33
import (
44
"bufio"
5-
"bytes"
65
"crypto/rand"
76
"crypto/sha256"
87
"encoding/binary"
@@ -76,7 +75,7 @@ type GzipResponseWriter struct {
7675
suffixETag string // Suffix to add to ETag header if response is compressed.
7776
dropETag bool // Drop ETag header if response is compressed (supersedes suffixETag).
7877
sha256Jitter bool // Use sha256 for jitter.
79-
randomJitter []byte // Add random bytes to output as header field.
78+
randomJitter string // Add random bytes to output as header field.
8079
jitterBuffer int // Maximum buffer to accumulate before doing jitter.
8180

8281
contentTypeFilter func(ct string) bool // Only compress if the response is one of these content-types. All are accepted if empty.
@@ -216,7 +215,7 @@ func (w *GzipResponseWriter) startGzip(remain []byte) error {
216215
// Initialize the GZIP response.
217216
w.init()
218217

219-
// Set random jitter based on CRC of current buffer
218+
// Set random jitter based on CRC or SHA-256 of current buffer.
220219
// Before first write.
221220
if len(w.randomJitter) > 0 {
222221
var jitRNG uint32
@@ -526,7 +525,7 @@ type config struct {
526525
suffixETag string
527526
dropETag bool
528527
jitterBuffer int
529-
randomJitter []byte
528+
randomJitter string
530529
sha256Jitter bool
531530
}
532531

@@ -721,14 +720,13 @@ func RandomJitter(n, buffer int, paranoid bool) option {
721720
return func(c *config) {
722721
if n > 0 {
723722
c.sha256Jitter = paranoid
724-
c.randomJitter = bytes.Repeat([]byte("Padding-"), 1+(n/8))
725-
c.randomJitter = c.randomJitter[:(n + 1)]
723+
c.randomJitter = strings.Repeat("Padding-", 1+(n/8))[:n+1]
726724
c.jitterBuffer = buffer
727725
if c.jitterBuffer == 0 {
728726
c.jitterBuffer = 64 << 10
729727
}
730728
} else {
731-
c.randomJitter = nil
729+
c.randomJitter = ""
732730
c.jitterBuffer = 0
733731
}
734732
}

gzhttp/writer/gzkp/gzkp.go

+6-16
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,13 @@ func NewWriter(w io.Writer, level int) writer.GzipWriter {
6161
}
6262
}
6363

64-
// SetHeader will override header with any non-nil values.
64+
// SetHeader will override the gzip header on pw.
6565
func (pw *pooledWriter) SetHeader(h writer.Header) {
66-
if h.Name != nil {
67-
pw.Name = string(h.Name)
68-
}
69-
if h.Extra != nil {
70-
pw.Extra = *h.Extra
71-
}
72-
if h.Comment != nil {
73-
pw.Comment = string(h.Comment)
74-
}
75-
if h.ModTime != nil {
76-
pw.ModTime = *h.ModTime
77-
}
78-
if h.OS != nil {
79-
pw.OS = *h.OS
80-
}
66+
pw.Name = h.Name
67+
pw.Extra = h.Extra
68+
pw.Comment = h.Comment
69+
pw.ModTime = h.ModTime
70+
pw.OS = h.OS
8171
}
8272

8373
func Levels() (min, max int) {

gzhttp/writer/gzstd/stdlib.go

+6-16
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,13 @@ func NewWriter(w io.Writer, level int) writer.GzipWriter {
6161
}
6262
}
6363

64-
// SetHeader will override header with any non-nil values.
64+
// SetHeader will override the gzip header on pw.
6565
func (pw *pooledWriter) SetHeader(h writer.Header) {
66-
if h.Name != nil {
67-
pw.Name = string(h.Name)
68-
}
69-
if h.Extra != nil {
70-
pw.Extra = *h.Extra
71-
}
72-
if h.Comment != nil {
73-
pw.Comment = string(h.Comment)
74-
}
75-
if h.ModTime != nil {
76-
pw.ModTime = *h.ModTime
77-
}
78-
if h.OS != nil {
79-
pw.OS = *h.OS
80-
}
66+
pw.Name = h.Name
67+
pw.Extra = h.Extra
68+
pw.Comment = h.Comment
69+
pw.ModTime = h.ModTime
70+
pw.OS = h.OS
8171
}
8272

8373
func Levels() (min, max int) {

gzhttp/writer/interface.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ type GzipWriterExt interface {
2121
SetHeader(h Header)
2222
}
2323

24-
// Header provides nillable header fields.
24+
// Header is a gzip header.
2525
type Header struct {
26-
Comment []byte // comment, converted to string if set.
27-
Extra *[]byte // "extra data"
28-
ModTime *time.Time // modification time
29-
Name []byte // file name, converted to string if set.
30-
OS *byte // operating system type
26+
Comment string // comment
27+
Extra []byte // "extra data"
28+
ModTime time.Time // modification time
29+
Name string // file name
30+
OS byte // operating system type
3131
}
3232

3333
// GzipWriterFactory contains the information needed for custom gzip implementations.

0 commit comments

Comments
 (0)