diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c
index a8cbd97708af9625956eb20355360f736dfaf23a..71e6f0320bf74b738a6ce2dd6e39251048b0bbb6 100644
--- a/libavformat/rtpproto.c
+++ b/libavformat/rtpproto.c
@@ -232,8 +232,10 @@ static void rtp_parse_addr_list(URLContext *h, char *buf,
         ai = rtp_resolve_host(p, 0, SOCK_DGRAM, AF_UNSPEC, 0);
         if (ai) {
             source_addr = av_mallocz(sizeof(struct sockaddr_storage));
-            if (!source_addr)
+            if (!source_addr) {
+                freeaddrinfo(ai);
                 break;
+            }
 
             memcpy(source_addr, ai->ai_addr, ai->ai_addrlen);
             freeaddrinfo(ai);