diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-02-18 09:07:34 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-02-18 14:57:38 +0100 |
commit | af143ef45e308a38900a9550c7fffb7f5734a97e (patch) | |
tree | 563febe7d89bd4766f96c1fe6c7c941bcf3f97f5 | |
parent | f26bc29cfec0be84c67cf74065cf8e5e78fd68b7 (diff) |
examples/http2-serverpush: add some sensible error checks
To avoid NULL pointer dereferences etc in the case of problems.
Closes #3580
-rw-r--r-- | docs/examples/http2-serverpush.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/docs/examples/http2-serverpush.c b/docs/examples/http2-serverpush.c index 66abb0f9b..63dff4cec 100644 --- a/docs/examples/http2-serverpush.c +++ b/docs/examples/http2-serverpush.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -128,9 +128,12 @@ int my_trace(CURL *handle, curl_infotype type, #define OUTPUTFILE "dl" -static void setup(CURL *hnd) +static int setup(CURL *hnd) { FILE *out = fopen(OUTPUTFILE, "wb"); + if(!out) + /* failed */ + return 1; /* write to this file */ curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); @@ -153,7 +156,7 @@ static void setup(CURL *hnd) /* wait for pipe connection to confirm */ curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); #endif - + return 0; /* all is good */ } /* called when there's an incoming push */ @@ -176,6 +179,11 @@ static int server_push_callback(CURL *parent, /* here's a new stream, save it in a new file for each new push */ out = fopen(filename, "wb"); + if(!out) { + /* if we can't save it, deny it */ + fprintf(stderr, "Failed to create output file for push\n"); + return CURL_PUSH_DENY; + } /* write to this file */ curl_easy_setopt(easy, CURLOPT_WRITEDATA, out); @@ -215,7 +223,10 @@ int main(void) easy = curl_easy_init(); /* set options */ - setup(easy); + if(setup(easy)) { + fprintf(stderr, "failed\n"); + return 1; + } /* add the easy transfer */ curl_multi_add_handle(multi_handle, easy); |