From f350a3f951c8d8eac40eb6acd334743a33520d0f Mon Sep 17 00:00:00 2001 From: zub Date: Sun, 14 Jun 2009 23:31:24 +0200 Subject: [PATCH] Free memory with dbus_free instead of free. Account for NULL signatures. (Glenn Schmottlach) --- src/message.cpp | 8 ++++++-- src/types.cpp | 10 +++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/message.cpp b/src/message.cpp index 3cc87f6..2c4d5b0 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -343,7 +343,10 @@ void MessageIter::copy_data(MessageIter &to) MessageIter from_container = from.recurse(); char *sig = from_container.signature(); - debug_log("copying compound type: %c[%s]", from.type(), sig); + if ( 0 != sig ) + { + debug_log("copying compound type: %c[%s]", from.type(), sig); + } MessageIter to_container (to.msg()); dbus_message_iter_open_container @@ -356,7 +359,8 @@ void MessageIter::copy_data(MessageIter &to) from_container.copy_data(to_container); to.close_container(to_container); - std::free(sig); + // Guaranteed to do nothing if passed NULL + dbus_free(sig); } } } diff --git a/src/types.cpp b/src/types.cpp index 8c59f28..28f3604 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -68,9 +68,13 @@ const Signature Variant::signature() const { char *sigbuf = reader().signature(); - Signature signature = sigbuf; - - std::free(sigbuf); + // Copy the signature + Signature signature; + if ( 0 != sigbuf ) + { + signature = std::string(sigbuf); + dbus_free(sigbuf); + } return signature; } -- 2.11.4.GIT