fc-fontations/pattern_bindings/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) New commits: commit 86b48ec01ece451d5270d0c5181a43151e45a042 Merge: 367495e 5baac4a Author: Akira TAGOH <akira@xxxxxxxxx> Date: Wed Jul 30 10:33:11 2025 +0000 Merge branch 'dontLeakValues' into 'main' [Fontations] Don't leak PatternElement values See merge request fontconfig/fontconfig!457 commit 5baac4a7e8cdaeff38c29c0724f09135798811bd Author: Dominik Röttsches <drott@xxxxxxxxxxxx> Date: Tue Jul 29 18:30:09 2025 +0300 [Fontations] Don't leak PatternElement values FcPatternObjectAdd(Range|CharSet|LangSet) do clone the values, so we need to free them on the Rust side and not leak them. However, the FcFontSetAdd() call does not clone the pattern that is passed in, so there, we do still need to use .into_raw(). This leak was identified in a downstream Chromium ASAN test build when using Fontations indexing. Fix manually verified against this test. diff --git a/fc-fontations/pattern_bindings/mod.rs b/fc-fontations/pattern_bindings/mod.rs index 6bf4248..b10979e 100644 --- a/fc-fontations/pattern_bindings/mod.rs +++ b/fc-fontations/pattern_bindings/mod.rs @@ -127,16 +127,16 @@ impl PatternElement { FcPatternObjectAddDouble(pattern, self.object_id, value) }, PatternValue::Range(value) => unsafe { - FcPatternObjectAddRange(pattern, self.object_id, value.into_raw()) + FcPatternObjectAddRange(pattern, self.object_id, value.as_ptr()) }, PatternValue::CharSet(value) => unsafe { - FcPatternObjectAddCharSet(pattern, self.object_id, value.into_raw()) + FcPatternObjectAddCharSet(pattern, self.object_id, value.as_ptr()) }, PatternValue::LangSet(value) => unsafe { FcPatternObjectAddLangSet( pattern, self.object_id, - value.into_raw() as *const FcLangSet, + value.as_ptr() as *const FcLangSet, ) }, } == 1;