From c8d5e783a311ca940371f55c37b12f3ea4bb95d9 Mon Sep 17 00:00:00 2001 From: Miccah Date: Thu, 3 Jun 2021 01:50:07 -0500 Subject: [PATCH] net: use custom error for invalid headers (#10323) --- vlib/net/http/header.v | 15 ++++++++++++++- vlib/net/http/http.v | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/vlib/net/http/header.v b/vlib/net/http/header.v index bd11c2670d..ca209fd35e 100644 --- a/vlib/net/http/header.v +++ b/vlib/net/http/header.v @@ -566,11 +566,24 @@ fn (mut h Header) add_key(key string) { } } +// Custom error struct for invalid header tokens +struct HeaderKeyError { + msg string + code int + header string + invalid_char byte +} + // Checks if the header token is valid fn is_valid(header string) ? { for _, c in header { if int(c) >= 128 || !is_token(c) { - return error('Invalid header key') + return IError(HeaderKeyError{ + msg: "Invalid header key: '$header'" + code: 1 + header: header + invalid_char: c + }) } } } diff --git a/vlib/net/http/http.v b/vlib/net/http/http.v index 27fc4de675..50d92eef20 100644 --- a/vlib/net/http/http.v +++ b/vlib/net/http/http.v @@ -291,7 +291,7 @@ pub fn parse_response(resp string) Response { pos := h.index(':') or { continue } mut key := h[..pos] val := h[pos + 2..].trim_space() - header.add_custom(key, val) or { eprintln('error parsing header: $err') } + header.add_custom(key, val) or { eprintln('$err; skipping header') } } // set cookies for cookie in header.values(.set_cookie) {