From 4eba55790224dd43e88d6a4bbf4fea826a59498f Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 13 Jan 2023 06:30:08 +0000 Subject: [PATCH] Fix memory leak. The buffer to hold the demangled name is allocated before the name is demangled. If the parse fails, this buffer is not deallocated, leaking it. Only create the buffer when the parse passes. Test: Ran address sanitizer on host and verified this leaks without Test: the fix and does not with the fix. Change-Id: I3ee20727972fc511f63aae2b50f5a34f0c792a5f --- src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 7610145..d220ec1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -163,10 +163,9 @@ unsafe fn rustc_demangle_native( } } - let mut out_buf = SystemBuffer::from_raw(out, out_size)?; - match rustc_demangle::try_demangle(mangled_str) { Ok(demangle) => { + let mut out_buf = SystemBuffer::from_raw(out, out_size)?; while write!(out_buf.as_mut_slice(), "{:#}\0", demangle).is_err() { out_buf.resize()?; } -- 2.39.0.246.g2a6d74b583-goog