Skip to content

Commit 1abdb1d

Browse files
cargo-credential-libsecret: give FFI correctly-sized object
The type is typedef struct { const gchar *name; SecretSchemaFlags flags; SecretSchemaAttribute attributes[32]; /* <private> */ 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
1 parent 219a4da commit 1abdb1d

File tree

1 file changed

+22
-0
lines changed
  • credential/cargo-credential-libsecret/src

1 file changed

+22
-0
lines changed

credential/cargo-credential-libsecret/src/lib.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ mod linux {
2222
#[allow(non_camel_case_types)]
2323
type gboolean = c_int;
2424

25+
#[allow(non_camel_case_types)]
26+
type gint = c_int;
27+
28+
#[allow(non_camel_case_types)]
29+
type gpointer = *mut ();
30+
2531
type GQuark = u32;
2632

2733
#[repr(C)]
@@ -41,6 +47,14 @@ mod linux {
4147
name: *const gchar,
4248
flags: SecretSchemaFlags,
4349
attributes: [SecretSchemaAttribute; 32],
50+
reserved: gint,
51+
reserved1: gpointer,
52+
reserved2: gpointer,
53+
reserved3: gpointer,
54+
reserved4: gpointer,
55+
reserved5: gpointer,
56+
reserved6: gpointer,
57+
reserved7: gpointer,
4458
}
4559

4660
#[repr(C)]
@@ -104,6 +118,14 @@ mod linux {
104118
name: b"org.rust-lang.cargo.registry\0".as_ptr() as *const gchar,
105119
flags: SecretSchemaFlags::None,
106120
attributes,
121+
reserved: 0,
122+
reserved1: null_mut(),
123+
reserved2: null_mut(),
124+
reserved3: null_mut(),
125+
reserved4: null_mut(),
126+
reserved5: null_mut(),
127+
reserved6: null_mut(),
128+
reserved7: null_mut(),
107129
}
108130
}
109131

0 commit comments

Comments
 (0)