From e4af68aa58b4a67454efe18c0e36a126dfe982da Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Tue, 20 Aug 2019 14:21:17 +0530 Subject: [PATCH] sctp: Fix crash on free() when using the MSVC binaries On Windows, if libusrsctp and gstreamer are built with different C runtimes (CRT), we cannot free memory allocated inside libusrsctp with the `free()` function from gstreamer's CRT. `usrsctp_freedumpbuffer()` simply calls `free()`, but because of the way DLLs work on Windows, it will always call the free function from the correct CRT. --- ext/sctp/sctpassociation.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ext/sctp/sctpassociation.c b/ext/sctp/sctpassociation.c index 23be55f..430e9cc 100644 --- a/ext/sctp/sctpassociation.c +++ b/ext/sctp/sctpassociation.c @@ -686,7 +686,11 @@ receive_cb (struct socket *sock, union sctp_sockstore addr, void *data, if (flags & MSG_NOTIFICATION) { handle_notification (self, (const union sctp_notification *) data, datalen); - free (data); + /* We use this instead of a bare `free()` so that we use the `free` from + * the C runtime that usrsctp was built with. This makes a difference on + * Windows where libusrstcp and GStreamer can be linked to two different + * CRTs. */ + usrsctp_freedumpbuffer (data); } else { handle_message (self, data, datalen, rcv_info.rcv_sid, ntohl (rcv_info.rcv_ppid)); -- 2.7.4