From 1abdb1d2aa13b5be2f212488a5a8288531f9e907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Tue, 22 Jul 2025 22:46:22 +0200 Subject: [PATCH] cargo-credential-libsecret: give FFI correctly-sized object The type is typedef struct { const gchar *name; SecretSchemaFlags flags; SecretSchemaAttribute attributes[32]; /* */ gint reserved; gpointer reserved1; gpointer reserved2; gpointer reserved3; gpointer reserved4; gpointer reserved5; gpointer reserved6; gpointer reserved7; } SecretSchema; so the current object we give it is 8 pointers too short It's incredibly lucky that libsecret, at this time, only uses reserved, and not in any of the functions we call --- .../cargo-credential-libsecret/src/lib.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/credential/cargo-credential-libsecret/src/lib.rs b/credential/cargo-credential-libsecret/src/lib.rs index b69fa2ee3..d59dbfef5 100644 --- a/credential/cargo-credential-libsecret/src/lib.rs +++ b/credential/cargo-credential-libsecret/src/lib.rs @@ -22,6 +22,12 @@ mod linux { #[allow(non_camel_case_types)] type gboolean = c_int; + #[allow(non_camel_case_types)] + type gint = c_int; + + #[allow(non_camel_case_types)] + type gpointer = *mut (); + type GQuark = u32; #[repr(C)] @@ -41,6 +47,14 @@ mod linux { name: *const gchar, flags: SecretSchemaFlags, attributes: [SecretSchemaAttribute; 32], + reserved: gint, + reserved1: gpointer, + reserved2: gpointer, + reserved3: gpointer, + reserved4: gpointer, + reserved5: gpointer, + reserved6: gpointer, + reserved7: gpointer, } #[repr(C)] @@ -104,6 +118,14 @@ mod linux { name: b"org.rust-lang.cargo.registry\0".as_ptr() as *const gchar, flags: SecretSchemaFlags::None, attributes, + reserved: 0, + reserved1: null_mut(), + reserved2: null_mut(), + reserved3: null_mut(), + reserved4: null_mut(), + reserved5: null_mut(), + reserved6: null_mut(), + reserved7: null_mut(), } }