Use g_memdup2() where available and add fallback for older GLib versions

glib 2.68 deprecates g_memdup(). Replace with g_memdup2() and
add fallback if compiling against older versions, since we
want to avoid deprecation warnings.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/803>
This commit is contained in:
Doug Nazar 2021-04-23 12:12:58 -04:00 committed by GStreamer Marge Bot
parent 4c75ec53e7
commit b16e96dd87
10 changed files with 27 additions and 11 deletions

View file

@ -30,6 +30,9 @@ G_BEGIN_DECLS
/* copies */
/* adaptations */
#if !GLIB_CHECK_VERSION(2, 67, 4)
#define g_memdup2(ptr,sz) ((G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL))
#endif
G_END_DECLS

View file

@ -40,6 +40,7 @@
#include <gst/gstinfo.h>
#include <gst/gstenumtypes.h>
#include <gst/gstpadtemplate.h>
#include "glib-compat-private.h"
#include <gst/gstregistrychunks.h>
@ -95,7 +96,7 @@ _strnlen (const gchar * str, gint maxlen)
gint _len = _strnlen (inptr, (endptr-inptr)); \
if (_len == -1) \
goto error_label; \
outptr = g_memdup ((gconstpointer)inptr, _len + 1); \
outptr = g_memdup2 ((gconstpointer)inptr, _len + 1); \
inptr += _len + 1; \
}G_STMT_END

View file

@ -27,6 +27,8 @@
#define GST_BIT_WRITER_DISABLE_INLINES
#include "gstbitwriter.h"
#include "gst/glib-compat-private.h"
/**
* SECTION:gstbitwriter
* @title: GstBitWriter
@ -200,7 +202,7 @@ gst_bit_writer_reset_and_get_data (GstBitWriter * bitwriter)
data = bitwriter->data;
if (bitwriter->owned)
data = g_memdup (data, bitwriter->bit_size >> 3);
data = g_memdup2 (data, bitwriter->bit_size >> 3);
gst_bit_writer_reset (bitwriter);
return data;
@ -232,7 +234,7 @@ gst_bit_writer_reset_and_get_buffer (GstBitWriter * bitwriter)
/* we cannot rely on buffers allocated externally, thus let's dup
* the data */
if (data && !bitwriter->owned)
data = g_memdup (data, size);
data = g_memdup2 (data, size);
buffer = gst_buffer_new ();
if (data != NULL) {

View file

@ -26,6 +26,7 @@
#define GST_BYTE_READER_DISABLE_INLINES
#include "gstbytereader.h"
#include "gst/glib-compat-private.h"
#include <string.h>
/**
@ -1222,7 +1223,7 @@ gst_byte_reader_dup_string_utf##bits (GstByteReader * reader, type ** str) \
*str = NULL; \
return FALSE; \
} \
*str = g_memdup (reader->data + reader->byte, size); \
*str = g_memdup2 (reader->data + reader->byte, size); \
reader->byte += size; \
return TRUE; \
}

View file

@ -362,7 +362,10 @@ static inline guint8 *
gst_byte_reader_dup_data_unchecked (GstByteReader * reader, guint size)
{
gconstpointer data = gst_byte_reader_get_data_unchecked (reader, size);
return (guint8 *) g_memdup (data, size);
guint8 *dup_data = (guint8 *) g_malloc (size);
memcpy (dup_data, data, size);
return dup_data;
}
/* Unchecked variants that should not be used */

View file

@ -25,6 +25,8 @@
#define GST_BYTE_WRITER_DISABLE_INLINES
#include "gstbytewriter.h"
#include "gst/glib-compat-private.h"
/**
* SECTION:gstbytewriter
* @title: GstByteWriter
@ -236,7 +238,7 @@ gst_byte_writer_reset_and_get_data (GstByteWriter * writer)
data = (guint8 *) writer->parent.data;
if (!writer->owned)
data = g_memdup (data, writer->parent.size);
data = g_memdup2 (data, writer->parent.size);
writer->parent.data = NULL;
gst_byte_writer_reset (writer);

View file

@ -61,6 +61,7 @@
#endif
#include <gst/gst.h>
#include "gst/glib-compat-private.h"
/* Index signals and args */
enum
@ -798,7 +799,7 @@ gst_index_add_associationv (GstIndex * index, gint id,
entry->type = GST_INDEX_ENTRY_ASSOCIATION;
entry->id = id;
entry->data.assoc.flags = flags;
entry->data.assoc.assocs = g_memdup (list, sizeof (GstIndexAssociation) * n);
entry->data.assoc.assocs = g_memdup2 (list, sizeof (GstIndexAssociation) * n);
entry->data.assoc.nassocs = n;
gst_index_add_entry (index, entry);

View file

@ -29,6 +29,7 @@
#include <gst/check/gstcheck.h>
#include <gst/base/gstbitwriter.h>
#include <gst/base/gstbitreader.h>
#include "gst/glib-compat-private.h"
GST_START_TEST (test_initialization)
{
@ -76,7 +77,7 @@ GST_START_TEST (test_data)
fail_unless (gst_bit_writer_put_bits_uint64 (&writer, 0x45, 48));
fail_unless_equals_int (gst_bit_writer_get_remaining (&writer), 2048 - 71);
fail_unless (gst_bit_writer_align_bytes (&writer, 0));
data = g_memdup (sdata, sizeof (sdata));
data = g_memdup2 (sdata, sizeof (sdata));
fail_unless (gst_bit_writer_put_bytes (&writer, data, sizeof (sdata)));
gst_bit_reader_init (&reader, gst_bit_writer_get_data (&writer), 256);

View file

@ -27,6 +27,7 @@
#include <gst/gst.h>
#include <gst/check/gstcheck.h>
#include <gst/base/gstbytereader.h>
#include "gst/glib-compat-private.h"
#ifndef fail_unless_equals_int64
#define fail_unless_equals_int64(a, b) \
@ -574,7 +575,7 @@ GST_START_TEST (test_scan)
gint found;
/* dup so valgrind can detect out of bounds access more easily */
m = g_memdup (sync_data, sizeof (sync_data));
m = g_memdup2 (sync_data, sizeof (sync_data));
gst_byte_reader_init (&reader, m, sizeof (sync_data));
found = gst_byte_reader_masked_scan_uint32_peek (&reader, 0xffffff00,

View file

@ -27,6 +27,7 @@
#include <gst/gst.h>
#include <gst/check/gstcheck.h>
#include <gst/base/gstbytewriter.h>
#include "gst/glib-compat-private.h"
GST_START_TEST (test_initialization)
{
@ -42,7 +43,7 @@ GST_START_TEST (test_initialization)
(&writer)), 0);
gst_byte_writer_reset (&writer);
data = g_memdup (sdata, sizeof (sdata));
data = g_memdup2 (sdata, sizeof (sdata));
gst_byte_writer_init_with_data (&writer, data, sizeof (sdata), FALSE);
fail_unless_equals_int (gst_byte_writer_get_pos (&writer), 0);
fail_unless_equals_int (gst_byte_writer_get_size (&writer), 0);
@ -56,7 +57,7 @@ GST_START_TEST (test_initialization)
g_free (data);
data = tmp = NULL;
data = g_memdup (sdata, sizeof (sdata));
data = g_memdup2 (sdata, sizeof (sdata));
gst_byte_writer_init_with_data (&writer, data, sizeof (sdata), TRUE);
fail_unless_equals_int (gst_byte_writer_get_pos (&writer), 0);
fail_unless_equals_int (gst_byte_writer_get_size (&writer), sizeof (sdata));