diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-01-21 04:18:52 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-01-21 04:18:52 +0000 |
commit | 959ff6b54c7376792659e0c46f5924d8f92a9c34 (patch) | |
tree | e19118d22b404667391cec531943dcc87ac1b446 | |
parent | c18c2440487fa83c96e3c13724839b2cdeb31e75 (diff) | |
parent | a9b93d807aad84aaf846a967c053529ddc09c879 (diff) | |
download | rustc-demangle-capi-959ff6b54c7376792659e0c46f5924d8f92a9c34.tar.gz |
Snap for 9514456 from a9b93d807aad84aaf846a967c053529ddc09c879 to udc-release
Change-Id: Ib408b8e7ac58eed9058f32e49c57f9d5ac35c7e6
-rw-r--r-- | patches/0003-Fix-memory-leak.patch | 36 | ||||
-rw-r--r-- | src/lib.rs | 3 |
2 files changed, 37 insertions, 2 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 + @@ -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()?; } |