From 00539e127758a93ea62a30b84c840bfcc002d53b Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Wed, 8 Apr 2020 09:45:17 -0400 Subject: [PATCH] rtspsrc: Avoid stack overflow recursing waiting for response Instead of recursing, simply implement a loop with gotos, the same way it was done before 812175288769d647ed6388755aed386378d9210c Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/710 --- gst/rtsp/gstrtspsrc.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index f2ca49e..09c42c7 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -6325,7 +6325,10 @@ gst_rtsp_src_receive_response (GstRTSPSrc * src, GstRTSPConnInfo * conninfo, { GstRTSPStatusCode thecode; gchar *content_base = NULL; - GstRTSPResult res = gst_rtspsrc_connection_receive (src, conninfo, response, + GstRTSPResult res; + +next: + res = gst_rtspsrc_connection_receive (src, conninfo, response, src->tcp_timeout); if (res < 0) @@ -6342,7 +6345,7 @@ gst_rtsp_src_receive_response (GstRTSPSrc * src, GstRTSPConnInfo * conninfo, goto handle_request_failed; /* Not a response, receive next message */ - return gst_rtsp_src_receive_response (src, conninfo, response, code); + goto next; case GST_RTSP_MESSAGE_RESPONSE: /* ok, a response is good */ GST_DEBUG_OBJECT (src, "received response message"); @@ -6353,13 +6356,13 @@ gst_rtsp_src_receive_response (GstRTSPSrc * src, GstRTSPConnInfo * conninfo, gst_rtspsrc_handle_data (src, response); /* Not a response, receive next message */ - return gst_rtsp_src_receive_response (src, conninfo, response, code); + goto next; default: GST_WARNING_OBJECT (src, "ignoring unknown message type %d", response->type); /* Not a response, receive next message */ - return gst_rtsp_src_receive_response (src, conninfo, response, code); + goto next; } thecode = response->type_data.response.code; -- 2.7.4