mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-04 09:42:19 +00:00
ext/neon/gstneonhttpsrc.c: Fix minor mem leak in redirect code.
Original commit message from CVS: * ext/neon/gstneonhttpsrc.c: (gst_neonhttp_src_create), (send_request_and_redirect): Fix minor mem leak in redirect code. * tests/check/Makefile.am: * tests/check/elements/.cvsignore: * tests/check/elements/neonhttpsrc.c: (handoff_cb), (GST_START_TEST), (neonhttpsrc_suite): * tests/check/gst-plugins-bad.supp: Add super-basic unit test for #384140.
This commit is contained in:
parent
9e71250a69
commit
d3c0b705eb
6 changed files with 137 additions and 2 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2006-12-12 Tim-Philipp Müller <tim at centricular dot net>
|
||||
|
||||
* ext/neon/gstneonhttpsrc.c: (gst_neonhttp_src_create),
|
||||
(send_request_and_redirect):
|
||||
Fix minor mem leak in redirect code.
|
||||
|
||||
* tests/check/Makefile.am:
|
||||
* tests/check/elements/.cvsignore:
|
||||
* tests/check/elements/neonhttpsrc.c: (handoff_cb),
|
||||
(GST_START_TEST), (neonhttpsrc_suite):
|
||||
* tests/check/gst-plugins-bad.supp:
|
||||
Add super-basic unit test for #384140.
|
||||
|
||||
2006-12-12 Tim-Philipp Müller <tim at centricular dot net>
|
||||
|
||||
* ext/neon/gstneonhttpsrc.c: (gst_neonhttp_src_create),
|
||||
|
|
|
@ -344,6 +344,8 @@ gst_neonhttp_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
|
|||
if (G_UNLIKELY (read < 0))
|
||||
goto read_error;
|
||||
|
||||
GST_LOG_OBJECT (src, "returning %u bytes", GST_BUFFER_SIZE (*outbuf));
|
||||
|
||||
done:
|
||||
return ret;
|
||||
|
||||
|
@ -411,8 +413,6 @@ send_request_and_redirect (GstNeonhttpSrc * src, gboolean do_redir)
|
|||
gint res;
|
||||
gint http_status = 0;
|
||||
|
||||
const gchar *redir = g_strdup ("");
|
||||
|
||||
guint request_count = 0;
|
||||
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
|
@ -454,6 +454,8 @@ send_request_and_redirect (GstNeonhttpSrc * src, gboolean do_redir)
|
|||
* Reload the HTTP request with a new URI value */
|
||||
http_status = ne_get_status (src->request)->code;
|
||||
if (http_status == 302) {
|
||||
const gchar *redir;
|
||||
|
||||
/* the new URI value to go when redirecting can be found on the 'Location' HTTP header */
|
||||
redir = ne_get_response_header (src->request, "Location");
|
||||
if (redir != NULL) {
|
||||
|
|
|
@ -32,6 +32,12 @@ else
|
|||
check_mpeg2enc =
|
||||
endif
|
||||
|
||||
if USE_NEON
|
||||
check_neon = elements/neonhttpsrc
|
||||
else
|
||||
check_neon =
|
||||
endif
|
||||
|
||||
if USE_WAVPACK
|
||||
check_wavpack = \
|
||||
elements/wavpackparse \
|
||||
|
@ -52,6 +58,7 @@ VALGRIND_TESTS_DISABLE = \
|
|||
|
||||
check_PROGRAMS = \
|
||||
$(check_mpeg2enc) \
|
||||
$(check_neon) \
|
||||
elements/rganalysis \
|
||||
elements/videocrop \
|
||||
$(check_wavpack) \
|
||||
|
|
1
tests/check/elements/.gitignore
vendored
1
tests/check/elements/.gitignore
vendored
|
@ -10,3 +10,4 @@ wavpackparse
|
|||
videocrop
|
||||
rganalysis
|
||||
y4menc
|
||||
neonhttpsrc.c
|
||||
|
|
103
tests/check/elements/neonhttpsrc.c
Normal file
103
tests/check/elements/neonhttpsrc.c
Normal file
|
@ -0,0 +1,103 @@
|
|||
/* GStreamer unit tests for the neonhttpsrc element
|
||||
* Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gst/check/gstcheck.h>
|
||||
|
||||
static void
|
||||
handoff_cb (GstElement * fakesink, GstBuffer * buf, GstPad * pad,
|
||||
GstBuffer ** p_outbuf)
|
||||
{
|
||||
GST_LOG ("handoff, buf = %p", buf);
|
||||
if (*p_outbuf == NULL)
|
||||
*p_outbuf = gst_buffer_ref (buf);
|
||||
}
|
||||
|
||||
GST_START_TEST (test_first_buffer_has_offset)
|
||||
{
|
||||
GstStateChangeReturn ret;
|
||||
GstElement *pipe, *src, *sink;
|
||||
GstBuffer *buf = NULL;
|
||||
|
||||
pipe = gst_pipeline_new (NULL);
|
||||
|
||||
src = gst_element_factory_make ("neonhttpsrc", NULL);
|
||||
fail_unless (src != NULL);
|
||||
|
||||
sink = gst_element_factory_make ("fakesink", NULL);
|
||||
fail_unless (sink != NULL);
|
||||
|
||||
gst_bin_add (GST_BIN (pipe), src);
|
||||
gst_bin_add (GST_BIN (pipe), sink);
|
||||
fail_unless (gst_element_link (src, sink));
|
||||
|
||||
g_object_set (src, "location", "http://www.google.comadfadf", NULL);
|
||||
g_object_set (src, "automatic-redirect", TRUE, NULL);
|
||||
|
||||
g_object_set (sink, "signal-handoffs", TRUE, NULL);
|
||||
g_signal_connect (sink, "preroll-handoff", G_CALLBACK (handoff_cb), &buf);
|
||||
|
||||
ret = gst_element_set_state (pipe, GST_STATE_PAUSED);
|
||||
if (ret != GST_STATE_CHANGE_ASYNC) {
|
||||
GST_DEBUG ("failed to start up neon http src, ret = %d", ret);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* don't wait for more than 10 seconds */
|
||||
ret = gst_element_get_state (pipe, NULL, NULL, 10 * GST_SECOND);
|
||||
GST_LOG ("ret = %u", ret);
|
||||
|
||||
if (buf == NULL) {
|
||||
/* we want to test the buffer offset, nothing else; if there's a failure
|
||||
* it might be for lots of reasons (no network connection, whatever), we're
|
||||
* not interested in those */
|
||||
GST_DEBUG ("didn't manage to get data within 10 seconds, skipping test");
|
||||
goto done;
|
||||
}
|
||||
|
||||
GST_DEBUG ("buffer offset = %" G_GUINT64_FORMAT, GST_BUFFER_OFFSET (buf));
|
||||
|
||||
/* first buffer should have a 0 offset */
|
||||
fail_unless (GST_BUFFER_OFFSET (buf) == 0);
|
||||
gst_buffer_unref (buf);
|
||||
|
||||
done:
|
||||
|
||||
gst_element_set_state (pipe, GST_STATE_NULL);
|
||||
gst_object_unref (pipe);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static Suite *
|
||||
neonhttpsrc_suite (void)
|
||||
{
|
||||
Suite *s = suite_create ("neonhttpsrc");
|
||||
TCase *tc_chain = tcase_create ("general");
|
||||
|
||||
suite_add_tcase (s, tc_chain);
|
||||
tcase_add_test (tc_chain, test_first_buffer_has_offset);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
GST_CHECK_MAIN (neonhttpsrc);
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
<suppression for libneon-25.5dfsg5 on tpm's edgy/x86>
|
||||
Memcheck:Param
|
||||
socketcall.sendto(msg)
|
||||
fun:sendto
|
||||
fun:getaddrinfo
|
||||
fun:ne_addr_resolve
|
||||
fun:ne_begin_request
|
||||
}
|
Loading…
Reference in a new issue