~sircmpwn/kineto

a584df6afa719cd9b9f0b70b9265cf65febfd8ec — Adnan Maolood 3 years ago 6d23d00
Display an error on charsets other than UTF-8

This prevents the proxy from sending invalid UTF-8 to the client.
1 files changed, 10 insertions(+), 2 deletions(-)

M main.go
M main.go => main.go +10 -2
@@ 453,8 453,7 @@ func proxyGemini(req gemini.Request, external bool, root *url.URL,
		return
	}

	// XXX: We could use the params I guess
	m, _, err := mime.ParseMediaType(resp.Meta)
	m, params, err := mime.ParseMediaType(resp.Meta)
	if err != nil {
		w.WriteHeader(http.StatusBadGateway)
		w.Write([]byte(fmt.Sprintf("Gateway error: %d %s: %v",


@@ 468,6 467,15 @@ func proxyGemini(req gemini.Request, external bool, root *url.URL,
		return
	}

	if charset, ok := params["charset"]; ok {
		charset = strings.ToLower(charset)
		if charset != "utf-8" {
			w.WriteHeader(http.StatusNotImplemented)
			fmt.Fprintf(w, "Unsupported charset: %s", charset)
			return
		}
	}

	w.Header().Add("Content-Type", "text/html")
	ctx := &GemtextContext{
		CSS:      css,