Add some error handling for errors during assembly of headers Signed-off-by: Tobias Schramm <toblemi...@gmail.com> --- uclient-http.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/uclient-http.c b/uclient-http.c index 20b8a9a..04f16a3 100644 --- a/uclient-http.c +++ b/uclient-http.c @@ -568,36 +568,36 @@ fail: return err; } -static void +static int uclient_http_add_auth_header(struct uclient_http *uh) { if (!uh->uc.url->auth) - return; + return 0; switch (uh->auth_type) { case AUTH_TYPE_UNKNOWN: case AUTH_TYPE_NONE: break; case AUTH_TYPE_BASIC: - uclient_http_add_auth_basic(uh); - break; + return uclient_http_add_auth_basic(uh); case AUTH_TYPE_DIGEST: - uclient_http_add_auth_digest(uh); - break; + return uclient_http_add_auth_digest(uh); } + + return 0; } -static void +static int uclient_http_send_headers(struct uclient_http *uh) { struct uclient_url *url = uh->uc.url; struct blob_attr *cur; enum request_type req_type = uh->req_type; bool literal_ipv6; - int rem; + int err, rem; if (uh->state >= HTTP_STATE_HEADERS_SENT) - return; + return 0; if (uh->uc.proxy_url) url = uh->uc.proxy_url; @@ -620,11 +620,14 @@ uclient_http_send_headers(struct uclient_http *uh) if (uclient_request_supports_body(uh->req_type)) ustream_printf(uh->us, "Transfer-Encoding: chunked\r\n"); - uclient_http_add_auth_header(uh); + if ((err = uclient_http_add_auth_header(uh))) + return err; ustream_printf(uh->us, "\r\n"); uh->state = HTTP_STATE_HEADERS_SENT; + + return 0; } static void uclient_http_headers_complete(struct uclient_http *uh) @@ -1020,12 +1023,14 @@ uclient_http_set_header(struct uclient *cl, const char *name, const char *value) static int uclient_http_send_data(struct uclient *cl, const char *buf, unsigned int len) { + int err; struct uclient_http *uh = container_of(cl, struct uclient_http, uc); if (uh->state >= HTTP_STATE_REQUEST_DONE) return -1; - uclient_http_send_headers(uh); + if ((err = uclient_http_send_headers(uh))) + return err; if (len > 0) { ustream_printf(uh->us, "%X\r\n", len); @@ -1039,12 +1044,15 @@ uclient_http_send_data(struct uclient *cl, const char *buf, unsigned int len) static int uclient_http_request_done(struct uclient *cl) { + int err; struct uclient_http *uh = container_of(cl, struct uclient_http, uc); if (uh->state >= HTTP_STATE_REQUEST_DONE) return -1; - uclient_http_send_headers(uh); + if ((err = uclient_http_send_headers(uh))) + return err; + if (uclient_request_supports_body(uh->req_type)) ustream_printf(uh->us, "0\r\n\r\n"); uh->state = HTTP_STATE_REQUEST_DONE; -- 2.16.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel