blob: 42aae076b06e6774facffc94892757aa2b488a06 [file] [log] [blame]
From 4eba55790224dd43e88d6a4bbf4fea826a59498f Mon Sep 17 00:00:00 2001
From: Christopher Ferris <cferris@google.com>
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