]> git.sesse.net Git - ffmpeg/commitdiff
avformat: Replace ffurl_close() by ffurl_closep() where appropriate
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Fri, 3 Apr 2020 15:03:38 +0000 (17:03 +0200)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Mon, 25 May 2020 11:11:36 +0000 (13:11 +0200)
It avoids leaving dangling pointers behind in memory.

Also remove redundant checks for whether the URLContext to be closed is
already NULL.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
24 files changed:
libavformat/async.c
libavformat/cache.c
libavformat/concat.c
libavformat/crypto.c
libavformat/gopher.c
libavformat/hlsproto.c
libavformat/icecast.c
libavformat/mmsh.c
libavformat/mmst.c
libavformat/rtmpcrypt.c
libavformat/rtmphttp.c
libavformat/rtmpproto.c
libavformat/rtpproto.c
libavformat/rtsp.c
libavformat/sapdec.c
libavformat/sapenc.c
libavformat/smoothstreamingenc.c
libavformat/srtpproto.c
libavformat/subfile.c
libavformat/tls_gnutls.c
libavformat/tls_libtls.c
libavformat/tls_openssl.c
libavformat/tls_schannel.c
libavformat/tls_securetransport.c

index 4e295b5e10fb0a4addee101513aa67d148ce6ef2..a0bdfa2ee3ae69840b516383bf4a27a0fd892295 100644 (file)
@@ -293,7 +293,7 @@ cond_wakeup_background_fail:
 cond_wakeup_main_fail:
     pthread_mutex_destroy(&c->mutex);
 mutex_fail:
-    ffurl_close(c->inner);
+    ffurl_closep(&c->inner);
 url_fail:
     ring_destroy(&c->ring);
 fifo_fail:
@@ -317,7 +317,7 @@ static int async_close(URLContext *h)
     pthread_cond_destroy(&c->cond_wakeup_background);
     pthread_cond_destroy(&c->cond_wakeup_main);
     pthread_mutex_destroy(&c->mutex);
-    ffurl_close(c->inner);
+    ffurl_closep(&c->inner);
     ring_destroy(&c->ring);
 
     return 0;
index 09e5d5f832de271b5c94925598ff7e31a4a05ad5..1e19dafc6a585cc71d53a0f03acc610105fd6cc2 100644 (file)
@@ -310,7 +310,7 @@ static int cache_close(URLContext *h)
             av_log(h, AV_LOG_ERROR, "Could not delete %s.\n", c->filename);
         av_freep(&c->filename);
     }
-    ffurl_close(c->inner);
+    ffurl_closep(&c->inner);
     av_tree_enumerate(c->root, NULL, NULL, enu_free);
     av_tree_destroy(c->root);
 
index cfe14760ebd7015c77647c1a66e6ee0d9548a5d9..418405dd50bf5acc2bf9659d91ccd39a4cee5253 100644 (file)
@@ -49,7 +49,7 @@ static av_cold int concat_close(URLContext *h)
     struct concat_nodes *nodes = data->nodes;
 
     for (i = 0; i != data->length; i++)
-        err |= ffurl_close(nodes[i].uc);
+        err |= ffurl_closep(&nodes[i].uc);
 
     av_freep(&data->nodes);
 
index 9a48f2e6f512ce8047ff39fdac221816f22c3e40..31f9ac0ab9824f2ba0b2ec99a234db6d1680c950 100644 (file)
@@ -385,8 +385,7 @@ static int crypto_close(URLContext *h)
         ret = ffurl_write(c->hd, out_buf, BLOCKSIZE);
     }
 
-    if (c->hd)
-        ffurl_close(c->hd);
+    ffurl_closep(&c->hd);
     av_freep(&c->aes_decrypt);
     av_freep(&c->aes_encrypt);
     av_freep(&c->write_buf);
index 3070b24caf2cfa2ac654c69a126afc365bbcae99..8b6d14a1f77b2d6917c881045f0999b9babaecf4 100644 (file)
@@ -68,10 +68,7 @@ static int gopher_connect(URLContext *h, const char *path)
 static int gopher_close(URLContext *h)
 {
     GopherContext *s = h->priv_data;
-    if (s->hd) {
-        ffurl_close(s->hd);
-        s->hd = NULL;
-    }
+    ffurl_closep(&s->hd);
     return 0;
 }
 
index e5673e5e03510048ea3aaa6e3440b54fdbbf9ab7..de45f771d660088b9ea67cdb5d926babd69fa693 100644 (file)
@@ -178,7 +178,7 @@ static int hls_close(URLContext *h)
 
     free_segment_list(s);
     free_variant_list(s);
-    ffurl_close(s->seg_hd);
+    ffurl_closep(&s->seg_hd);
     return 0;
 }
 
@@ -260,8 +260,7 @@ start:
             return ret;
     }
     if (s->seg_hd) {
-        ffurl_close(s->seg_hd);
-        s->seg_hd = NULL;
+        ffurl_closep(&s->seg_hd);
         s->cur_seq_no++;
     }
     reload_interval = s->n_segments > 0 ?
index 7d8f92fe73f509983274dd8d0e1648dd90cbbe0f..38af16b99e292d3e1757c2ba459675104778a244 100644 (file)
@@ -75,8 +75,7 @@ static void cat_header(AVBPrint *bp, const char key[], const char value[])
 static int icecast_close(URLContext *h)
 {
     IcecastContext *s = h->priv_data;
-    if (s->hd)
-        ffurl_close(s->hd);
+    ffurl_closep(&s->hd);
     return 0;
 }
 
index 13c0ffe43878456b91966dfdcd9d86717ec3dc44..495d7fb73ba5ab83566af5828a73b5122f766d11 100644 (file)
@@ -65,8 +65,7 @@ static int mmsh_close(URLContext *h)
 {
     MMSHContext *mmsh = (MMSHContext *)h->priv_data;
     MMSContext *mms   = &mmsh->mms;
-    if (mms->mms_hd)
-        ffurl_closep(&mms->mms_hd);
+    ffurl_closep(&mms->mms_hd);
     av_freep(&mms->streams);
     av_freep(&mms->asf_header);
     return 0;
@@ -265,7 +264,7 @@ static int mmsh_open_internal(URLContext *h, const char *uri, int flags, int tim
     }
 
     // close the socket and then reopen it for sending the second play request.
-    ffurl_close(mms->mms_hd);
+    ffurl_closep(&mms->mms_hd);
     memset(headers, 0, sizeof(headers));
     if ((err = ffurl_alloc(&mms->mms_hd, httpname, AVIO_FLAG_READ,
                            &h->interrupt_callback)) < 0) {
index 533cbe769867ff2e601d115506f38ee913b9afc1..377323fe27407da43613e945ef451b0babbbe073 100644 (file)
@@ -473,7 +473,7 @@ static int mms_close(URLContext *h)
     MMSContext *mms   = &mmst->mms;
     if(mms->mms_hd) {
         send_close_packet(mmst);
-        ffurl_close(mms->mms_hd);
+        ffurl_closep(&mms->mms_hd);
     }
 
     /* free all separately allocated pointers in mms */
index 253b8ca2ce15a73d8382a265174128e40893e6e2..a835ab263f5c93ed6226dc2e7e16d27e089145a1 100644 (file)
@@ -240,7 +240,7 @@ static int rtmpe_close(URLContext *h)
     RTMPEContext *rt = h->priv_data;
 
     ff_dh_free(rt->dh);
-    ffurl_close(rt->stream);
+    ffurl_closep(&rt->stream);
 
     return 0;
 }
index ef6146ca8640eaa13ca9c374f9553702e13b10d3..c920c19ab5b971dfdf93012b1632d54b706da706 100644 (file)
@@ -176,7 +176,7 @@ static int rtmp_http_close(URLContext *h)
     }
 
     av_freep(&rt->out_data);
-    ffurl_close(rt->stream);
+    ffurl_closep(&rt->stream);
 
     return ret;
 }
index e23426b7708e8b991217eeb357fe85adfdfb456b..d9741bc622cdf74dd45c4d02d324259d1d9a54b3 100644 (file)
@@ -2511,7 +2511,7 @@ static int rtmp_close(URLContext *h)
 
     free_tracked_methods(rt);
     av_freep(&rt->flv_data);
-    ffurl_close(rt->stream);
+    ffurl_closep(&rt->stream);
     return ret;
 }
 
@@ -2824,8 +2824,7 @@ reconnect:
 
     if (rt->do_reconnect) {
         int i;
-        ffurl_close(rt->stream);
-        rt->stream       = NULL;
+        ffurl_closep(&rt->stream);
         rt->do_reconnect = 0;
         rt->nb_invokes   = 0;
         for (i = 0; i < 2; i++)
index 1f0a82ac7e545db06b0f6ce517db851781be9fd7..ca63c165e49ad795dc71200bf41c6da4a320c904 100644 (file)
@@ -363,10 +363,8 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
     return 0;
 
  fail:
-    if (s->rtp_hd)
-        ffurl_close(s->rtp_hd);
-    if (s->rtcp_hd)
-        ffurl_close(s->rtcp_hd);
+    ffurl_closep(&s->rtp_hd);
+    ffurl_closep(&s->rtcp_hd);
     ffurl_closep(&s->fec_hd);
     av_free(fec_protocol);
     av_dict_free(&fec_opts);
@@ -506,8 +504,8 @@ static int rtp_close(URLContext *h)
 
     ff_ip_reset_filters(&s->filters);
 
-    ffurl_close(s->rtp_hd);
-    ffurl_close(s->rtcp_hd);
+    ffurl_closep(&s->rtp_hd);
+    ffurl_closep(&s->rtcp_hd);
     ffurl_closep(&s->fec_hd);
     return 0;
 }
index b2b3f3201135a498ebec74ae339cd40eab4625eb..5d8491b74bace111d21ccd182e2df2a225a7800c 100644 (file)
@@ -763,9 +763,7 @@ void ff_rtsp_undo_setup(AVFormatContext *s, int send_packets)
                 ff_rtp_parse_close(rtsp_st->transport_priv);
         }
         rtsp_st->transport_priv = NULL;
-        if (rtsp_st->rtp_handle)
-            ffurl_close(rtsp_st->rtp_handle);
-        rtsp_st->rtp_handle = NULL;
+        ffurl_closep(&rtsp_st->rtp_handle);
     }
 }
 
@@ -1666,9 +1664,10 @@ fail:
 void ff_rtsp_close_connections(AVFormatContext *s)
 {
     RTSPState *rt = s->priv_data;
-    if (rt->rtsp_hd_out != rt->rtsp_hd) ffurl_close(rt->rtsp_hd_out);
-    ffurl_close(rt->rtsp_hd);
-    rt->rtsp_hd = rt->rtsp_hd_out = NULL;
+    if (rt->rtsp_hd_out != rt->rtsp_hd)
+        ffurl_closep(&rt->rtsp_hd_out);
+    rt->rtsp_hd_out = NULL;
+    ffurl_closep(&rt->rtsp_hd);
 }
 
 int ff_rtsp_connect(AVFormatContext *s)
@@ -2496,8 +2495,7 @@ static int rtp_read_header(AVFormatContext *s)
         break;
     }
     getsockname(ffurl_get_file_handle(in), (struct sockaddr*) &addr, &addrlen);
-    ffurl_close(in);
-    in = NULL;
+    ffurl_closep(&in);
 
     par = avcodec_parameters_alloc();
     if (!par) {
@@ -2571,8 +2569,7 @@ fail_nobuf:
     av_bprint_finalize(&sdp, NULL);
 fail:
     avcodec_parameters_free(&par);
-    if (in)
-        ffurl_close(in);
+    ffurl_closep(&in);
     ff_network_close();
     return ret;
 }
index b3644b436b51c0f6e7f42606a33898b2257d96bd..eec73aa2f4593399b83483fa305c5f30917602e4 100644 (file)
@@ -54,8 +54,7 @@ static int sap_read_close(AVFormatContext *s)
     struct SAPState *sap = s->priv_data;
     if (sap->sdp_ctx)
         avformat_close_input(&sap->sdp_ctx);
-    if (sap->ann_fd)
-        ffurl_close(sap->ann_fd);
+    ffurl_closep(&sap->ann_fd);
     av_freep(&sap->sdp);
     ff_network_close();
     return 0;
index f9afab0c33eb4efa6eb4ff236e45d20f172a5188..dc1c210408261a4343c4d2e84e47bed4359471b8 100644 (file)
@@ -60,8 +60,7 @@ static int sap_write_close(AVFormatContext *s)
     }
 
     av_freep(&sap->ann);
-    if (sap->ann_fd)
-        ffurl_close(sap->ann_fd);
+    ffurl_closep(&sap->ann_fd);
     ff_network_close();
     return 0;
 }
index d10d5d1444af7749c8b731576b8df5d185bb55e1..33bb404f467e6e2f5135284a696a4dfec29ed273 100644 (file)
@@ -99,14 +99,9 @@ static int64_t ism_seek(void *opaque, int64_t offset, int whence)
     if (whence != SEEK_SET)
         return AVERROR(ENOSYS);
     if (os->tail_out) {
-        if (os->out) {
-            ffurl_close(os->out);
-        }
-        if (os->out2) {
-            ffurl_close(os->out2);
-        }
+        ffurl_closep(&os->out);
+        ffurl_closep(&os->out2);
         os->out = os->tail_out;
-        os->out2 = NULL;
         os->tail_out = NULL;
     }
     if (offset >= os->cur_start_pos) {
@@ -175,10 +170,9 @@ static void ism_free(AVFormatContext *s)
         return;
     for (i = 0; i < s->nb_streams; i++) {
         OutputStream *os = &c->streams[i];
-        ffurl_close(os->out);
-        ffurl_close(os->out2);
-        ffurl_close(os->tail_out);
-        os->out = os->out2 = os->tail_out = NULL;
+        ffurl_closep(&os->out);
+        ffurl_closep(&os->out2);
+        ffurl_closep(&os->tail_out);
         if (os->ctx && os->ctx_inited)
             av_write_trailer(os->ctx);
         if (os->ctx && os->ctx->pb)
@@ -537,8 +531,7 @@ static int ism_flush(AVFormatContext *s, int final)
         if (!os->out || os->tail_out)
             return AVERROR(EIO);
 
-        ffurl_close(os->out);
-        os->out = NULL;
+        ffurl_closep(&os->out);
         size = os->tail_pos - os->cur_start_pos;
         if ((ret = parse_fragment(s, filename, &start_ts, &duration, &moof_size, size)) < 0)
             break;
index 5e6e5164d757fbbc1f3c144116c26d23673ec13b..13e2245015f5108708ba0d3994103497a8386948 100644 (file)
@@ -59,8 +59,7 @@ static int srtp_close(URLContext *h)
     SRTPProtoContext *s = h->priv_data;
     ff_srtp_free(&s->srtp_out);
     ff_srtp_free(&s->srtp_in);
-    ffurl_close(s->rtp_hd);
-    s->rtp_hd = NULL;
+    ffurl_closep(&s->rtp_hd);
     return 0;
 }
 
index 5d8659c8c428e4c4e4f976a93f5ade20f1dc1581..300672e657d43f9e69e335da669c8d4cad27a4fa 100644 (file)
@@ -86,7 +86,7 @@ static int subfile_open(URLContext *h, const char *filename, int flags,
         return ret;
     c->pos = c->start;
     if ((ret = slave_seek(h)) < 0) {
-        ffurl_close(c->h);
+        ffurl_closep(&c->h);
         return ret;
     }
     return 0;
@@ -95,7 +95,7 @@ static int subfile_open(URLContext *h, const char *filename, int flags,
 static int subfile_close(URLContext *h)
 {
     SubfileContext *c = h->priv_data;
-    return ffurl_close(c->h);
+    return ffurl_closep(&c->h);
 }
 
 static int subfile_read(URLContext *h, unsigned char *buf, int size)
index e41156cc30ed162989e4e41c5d2244db1b749c78..0c4ef34f5fc60fcc6edae4782332d9bf0ca908b3 100644 (file)
@@ -100,8 +100,7 @@ static int tls_close(URLContext *h)
         gnutls_deinit(c->session);
     if (c->cred)
         gnutls_certificate_free_credentials(c->cred);
-    if (c->tls_shared.tcp)
-        ffurl_close(c->tls_shared.tcp);
+    ffurl_closep(&c->tls_shared.tcp);
     ff_gnutls_deinit();
     return 0;
 }
index ba83b56ffe2a3ab3112d0abb238c21f53bb12fcd..dff7f2d9fb47530f1511d231c5dbd331a1fb2001 100644 (file)
@@ -44,8 +44,7 @@ static int ff_tls_close(URLContext *h)
         tls_close(p->ctx);
         tls_free(p->ctx);
     }
-    if (p->tls_shared.tcp)
-        ffurl_close(p->tls_shared.tcp);
+    ffurl_closep(&p->tls_shared.tcp);
     return 0;
 }
 
index e305b2465a0d704e8409d10c73366b1cca631003..002197fa76daa38479a8fb0560e898e3b540f752 100644 (file)
@@ -142,8 +142,7 @@ static int tls_close(URLContext *h)
     }
     if (c->ctx)
         SSL_CTX_free(c->ctx);
-    if (c->tls_shared.tcp)
-        ffurl_close(c->tls_shared.tcp);
+    ffurl_closep(&c->tls_shared.tcp);
 #if OPENSSL_VERSION_NUMBER >= 0x1010000fL
     if (c->url_bio_method)
         BIO_meth_free(c->url_bio_method);
index fec43ffafdbfaf0ee15abe777aa712d5d19ed073..4bfaa852284c0d48927aa779f60b5075e1f0c154 100644 (file)
@@ -138,8 +138,7 @@ static int tls_close(URLContext *h)
     av_freep(&c->dec_buf);
     c->dec_buf_size = c->dec_buf_offset = 0;
 
-    if (c->tls_shared.tcp)
-        ffurl_close(c->tls_shared.tcp);
+    ffurl_closep(&c->tls_shared.tcp);
     return 0;
 }
 
index 37380541b11c9d9c0b1c1018eb9d1f1ea3202636..3250b2305174c0ea9e3237f9fe56d1d05104ab24 100644 (file)
@@ -251,8 +251,7 @@ static int tls_close(URLContext *h)
     }
     if (c->ca_array)
         CFRelease(c->ca_array);
-    if (c->tls_shared.tcp)
-        ffurl_close(c->tls_shared.tcp);
+    ffurl_closep(&c->tls_shared.tcp);
     return 0;
 }