Skip to content

Commit 369fe12

Browse files
committed
revel#914 one edge case is addressed
1 parent dd9ff3b commit 369fe12

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

compress.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ func (c *CompressResponseWriter) WriteHeader(status int) {
100100

101101
func (c *CompressResponseWriter) Close() error {
102102
if c.compressionType != "" {
103-
c.compressWriter.Close()
103+
_ = c.compressWriter.Close()
104104
}
105105
if w, ok := c.ResponseWriter.(io.Closer); ok {
106-
w.Close()
106+
_ = w.Close()
107107
}
108108
// Non-blocking write to the closenotifier, if we for some reason should
109109
// get called multiple times
@@ -135,26 +135,36 @@ func (c *CompressResponseWriter) Write(b []byte) (int, error) {
135135

136136
if c.compressionType != "" {
137137
return c.compressWriter.Write(b)
138-
} else {
139-
return c.ResponseWriter.Write(b)
140138
}
139+
140+
return c.ResponseWriter.Write(b)
141141
}
142142

143+
// DetectCompressionType method detects the comperssion type
144+
// from header "Accept-Encoding"
143145
func (c *CompressResponseWriter) DetectCompressionType(req *Request, resp *Response) {
144146
if Config.BoolDefault("results.compressed", false) {
145147
acceptedEncodings := strings.Split(req.Request.Header.Get("Accept-Encoding"), ",")
146148

147149
largestQ := 0.0
148150
chosenEncoding := len(compressionTypes)
149151

152+
// I have fixed one edge case for issue #914
153+
// But it's better to cover all possible edge cases or
154+
// Adapt to https://github.com/golang/gddo/blob/master/httputil/header/header.go#L172
150155
for _, encoding := range acceptedEncodings {
151156
encoding = strings.TrimSpace(encoding)
152157
encodingParts := strings.SplitN(encoding, ";", 2)
153158

154159
// If we are the format "gzip;q=0.8"
155160
if len(encodingParts) > 1 {
161+
q := strings.TrimSpace(encodingParts[1])
162+
if len(q) == 0 || !strings.HasPrefix(q, "q=") {
163+
continue
164+
}
165+
156166
// Strip off the q=
157-
num, err := strconv.ParseFloat(strings.TrimSpace(encodingParts[1])[2:], 32)
167+
num, err := strconv.ParseFloat(q[2:], 32)
158168
if err != nil {
159169
continue
160170
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy