37 lines
1.1 KiB
Diff
37 lines
1.1 KiB
Diff
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
|
|
|