diff options
author | Christopher Ferris <cferris@google.com> | 2023-01-20 19:46:44 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-01-20 19:46:44 +0000 |
commit | 535342b17f11844df8bf97fb37ecbe52ec6a9aa7 (patch) | |
tree | e19118d22b404667391cec531943dcc87ac1b446 | |
parent | ffdc436b68b4f7cebcd41687a1bd0bb42ddefec4 (diff) | |
parent | aef10a18bf03547a0a0d8dd0fcfd271715a4bca9 (diff) | |
download | rustc-demangle-capi-535342b17f11844df8bf97fb37ecbe52ec6a9aa7.tar.gz |
Add patch for memory leak fix. am: aef10a18bf
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/rustc-demangle-capi/+/2395573
Change-Id: Ic9c5a8a5fbe162c075577264e9b95a3cb2601b39
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | patches/0003-Fix-memory-leak.patch | 36 |
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 + |