1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

http2: fix OOM crash

torture mode with test 1021 found it
This commit is contained in:
Daniel Stenberg 2017-06-18 23:57:45 +02:00
parent 7b3b4722be
commit 65ca030513
2 changed files with 10 additions and 5 deletions

View File

@ -2134,12 +2134,15 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
return CURLE_OK; return CURLE_OK;
} }
void Curl_http2_add_child(struct Curl_easy *parent, struct Curl_easy *child, CURLcode Curl_http2_add_child(struct Curl_easy *parent,
bool exclusive) struct Curl_easy *child,
bool exclusive)
{ {
if(parent) { if(parent) {
struct Curl_http2_dep **tail; struct Curl_http2_dep **tail;
struct Curl_http2_dep *dep = calloc(1, sizeof(struct Curl_http2_dep)); struct Curl_http2_dep *dep = calloc(1, sizeof(struct Curl_http2_dep));
if(!dep)
return CURLE_OUT_OF_MEMORY;
dep->data = child; dep->data = child;
if(parent->set.stream_dependents && exclusive) { if(parent->set.stream_dependents && exclusive) {
@ -2170,6 +2173,7 @@ void Curl_http2_add_child(struct Curl_easy *parent, struct Curl_easy *child,
child->set.stream_depends_on = parent; child->set.stream_depends_on = parent;
child->set.stream_depends_e = exclusive; child->set.stream_depends_e = exclusive;
return CURLE_OK;
} }
void Curl_http2_remove_child(struct Curl_easy *parent, struct Curl_easy *child) void Curl_http2_remove_child(struct Curl_easy *parent, struct Curl_easy *child)

View File

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -53,8 +53,9 @@ void Curl_http2_setup_conn(struct connectdata *conn);
void Curl_http2_setup_req(struct Curl_easy *data); void Curl_http2_setup_req(struct Curl_easy *data);
void Curl_http2_done(struct connectdata *conn, bool premature); void Curl_http2_done(struct connectdata *conn, bool premature);
CURLcode Curl_http2_done_sending(struct connectdata *conn); CURLcode Curl_http2_done_sending(struct connectdata *conn);
void Curl_http2_add_child(struct Curl_easy *parent, struct Curl_easy *child, CURLcode Curl_http2_add_child(struct Curl_easy *parent,
bool exclusive); struct Curl_easy *child,
bool exclusive);
void Curl_http2_remove_child(struct Curl_easy *parent, void Curl_http2_remove_child(struct Curl_easy *parent,
struct Curl_easy *child); struct Curl_easy *child);
void Curl_http2_cleanup_dependencies(struct Curl_easy *data); void Curl_http2_cleanup_dependencies(struct Curl_easy *data);