summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2023-01-20 20:20:15 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-01-20 20:20:15 +0000
commit0a3c89dd72aed73e33010e312a338a934eec6f75 (patch)
treee19118d22b404667391cec531943dcc87ac1b446
parentae4589fef842dd4eb2e5084b2e8f8c356beff8e8 (diff)
parent535342b17f11844df8bf97fb37ecbe52ec6a9aa7 (diff)
downloadrustc-demangle-capi-0a3c89dd72aed73e33010e312a338a934eec6f75.tar.gz
Add patch for memory leak fix. am: aef10a18bf am: 535342b17f
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/rustc-demangle-capi/+/2395573 Change-Id: Ifb1a3fecfed38443b3561ea29254ef79721ebf08 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--patches/0003-Fix-memory-leak.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/patches/0003-Fix-memory-leak.patch b/patches/0003-Fix-memory-leak.patch
new file mode 100644
index 0000000..42aae07
--- /dev/null
+++ b/patches/0003-Fix-memory-leak.patch
@@ -0,0 +1,36 @@
+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
+