]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
lib: fix null ptr derefs and uninitialized vars (h2/h3)
authorViktor Szakats <commit@vsz.me>
Fri, 25 Aug 2023 22:28:35 +0000 (22:28 +0000)
committerViktor Szakats <commit@vsz.me>
Mon, 28 Aug 2023 19:47:14 +0000 (19:47 +0000)
Fixing compiler warnings with gcc 13.2.0 in unity builds.

Assisted-by: Jay Satiro
Assisted-by: Stefan Eissing
Closes #11739

lib/cf-h2-proxy.c
lib/http2.c
lib/vquic/curl_ngtcp2.c
lib/vquic/vquic.c

index 817ec24022adf9b48d2f6de41bd1f2c927b9bfea..9f9f6059351a6e6e24658fff7de29df6baf344de 100644 (file)
@@ -244,12 +244,17 @@ static ssize_t proxy_nw_in_reader(void *reader_ctx,
                                   CURLcode *err)
 {
   struct Curl_cfilter *cf = reader_ctx;
-  struct Curl_easy *data = CF_DATA_CURRENT(cf);
   ssize_t nread;
 
-  nread = Curl_conn_cf_recv(cf->next, data, (char *)buf, buflen, err);
-  CURL_TRC_CF(data, cf, "nw_in_reader(len=%zu) -> %zd, %d",
-              buflen, nread, *err);
+  if(cf) {
+    struct Curl_easy *data = CF_DATA_CURRENT(cf);
+    nread = Curl_conn_cf_recv(cf->next, data, (char *)buf, buflen, err);
+    CURL_TRC_CF(data, cf, "nw_in_reader(len=%zu) -> %zd, %d",
+                buflen, nread, *err);
+  }
+  else {
+    nread = 0;
+  }
   return nread;
 }
 
@@ -258,12 +263,18 @@ static ssize_t proxy_h2_nw_out_writer(void *writer_ctx,
                                       CURLcode *err)
 {
   struct Curl_cfilter *cf = writer_ctx;
-  struct Curl_easy *data = CF_DATA_CURRENT(cf);
   ssize_t nwritten;
 
-  nwritten = Curl_conn_cf_send(cf->next, data, (const char *)buf, buflen, err);
-  CURL_TRC_CF(data, cf, "nw_out_writer(len=%zu) -> %zd, %d",
-              buflen, nwritten, *err);
+  if(cf) {
+    struct Curl_easy *data = CF_DATA_CURRENT(cf);
+    nwritten = Curl_conn_cf_send(cf->next, data, (const char *)buf, buflen,
+                                 err);
+    CURL_TRC_CF(data, cf, "nw_out_writer(len=%zu) -> %zd, %d",
+                buflen, nwritten, *err);
+  }
+  else {
+    nwritten = 0;
+  }
   return nwritten;
 }
 
index 63873cc0b8b77790d6124d04f8b88ba18fee8a2a..2c5d6b4d74830f713c70ba36485fabff297dbcfc 100644 (file)
@@ -1814,10 +1814,10 @@ out:
 }
 
 static ssize_t stream_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+                           struct stream_ctx *stream,
                            char *buf, size_t len, CURLcode *err)
 {
   struct cf_h2_ctx *ctx = cf->ctx;
-  struct stream_ctx *stream = H2_STREAM_CTX(data);
   ssize_t nread = -1;
 
   *err = CURLE_AGAIN;
@@ -1937,7 +1937,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
 
   CF_DATA_SAVE(save, cf, data);
 
-  nread = stream_recv(cf, data, buf, len, err);
+  nread = stream_recv(cf, data, stream, buf, len, err);
   if(nread < 0 && *err != CURLE_AGAIN)
     goto out;
 
@@ -1946,7 +1946,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
     if(*err)
       goto out;
 
-    nread = stream_recv(cf, data, buf, len, err);
+    nread = stream_recv(cf, data, stream, buf, len, err);
   }
 
   if(nread > 0) {
index d4701a31d8dd2f33e1dcca77116f27d40b04cae2..ebc391bf0b2ea92db5d9a72eede75c4a9ea9858b 100644 (file)
@@ -2349,7 +2349,7 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf,
   int rc;
   int rv;
   CURLcode result;
-  const struct Curl_sockaddr_ex *sockaddr;
+  const struct Curl_sockaddr_ex *sockaddr = NULL;
   int qfd;
 
   ctx->version = NGTCP2_PROTO_VER_MAX;
@@ -2395,6 +2395,8 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf,
 
   Curl_cf_socket_peek(cf->next, data, &ctx->q.sockfd,
                       &sockaddr, NULL, NULL, NULL, NULL);
+  if(!sockaddr)
+    return CURLE_QUIC_CONNECT_ERROR;
   ctx->q.local_addrlen = sizeof(ctx->q.local_addr);
   rv = getsockname(ctx->q.sockfd, (struct sockaddr *)&ctx->q.local_addr,
                    &ctx->q.local_addrlen);
@@ -2525,8 +2527,8 @@ out:
 
 #ifndef CURL_DISABLE_VERBOSE_STRINGS
   if(result) {
-    const char *r_ip;
-    int r_port;
+    const char *r_ip = NULL;
+    int r_port = 0;
 
     Curl_cf_socket_peek(cf->next, data, NULL, NULL,
                         &r_ip, &r_port, NULL, NULL);
index a60165f91f98eb3da17f5fd7346fbfeee8197f03..e6b50d327afe0f25b65fafaf0b8c6ceaca556c4e 100644 (file)
@@ -334,8 +334,8 @@ static CURLcode recvmmsg_packets(struct Curl_cfilter *cf,
         goto out;
       }
       if(!cf->connected && SOCKERRNO == ECONNREFUSED) {
-        const char *r_ip;
-        int r_port;
+        const char *r_ip = NULL;
+        int r_port = 0;
         Curl_cf_socket_peek(cf->next, data, NULL, NULL,
                             &r_ip, &r_port, NULL, NULL);
         failf(data, "QUIC: connection to %s port %u refused",
@@ -404,8 +404,8 @@ static CURLcode recvmsg_packets(struct Curl_cfilter *cf,
         goto out;
       }
       if(!cf->connected && SOCKERRNO == ECONNREFUSED) {
-        const char *r_ip;
-        int r_port;
+        const char *r_ip = NULL;
+        int r_port = 0;
         Curl_cf_socket_peek(cf->next, data, NULL, NULL,
                             &r_ip, &r_port, NULL, NULL);
         failf(data, "QUIC: connection to %s port %u refused",
@@ -464,8 +464,8 @@ static CURLcode recvfrom_packets(struct Curl_cfilter *cf,
         goto out;
       }
       if(!cf->connected && SOCKERRNO == ECONNREFUSED) {
-        const char *r_ip;
-        int r_port;
+        const char *r_ip = NULL;
+        int r_port = 0;
         Curl_cf_socket_peek(cf->next, data, NULL, NULL,
                             &r_ip, &r_port, NULL, NULL);
         failf(data, "QUIC: connection to %s port %u refused",