summaryrefslogtreecommitdiff
path: root/libsecret
diff options
context:
space:
mode:
authorDaiki Ueno <dueno@src.gnome.org>2020-03-09 15:25:14 +0100
committerDaiki Ueno <ueno@gnu.org>2020-03-10 13:20:31 +0000
commita54f5011fc3bab941827cdca4be6560b2421bee8 (patch)
treef7c8079a114ac6616c05f407c5b0d56fe110ee25 /libsecret
parent9adf321442d2bb547ad5cc8354c2acdc8341bab9 (diff)
downloadlibsecret-a54f5011fc3bab941827cdca4be6560b2421bee8.tar.gz
secret-file-collection: force little-endian in GVariant
As the GVariant serialization format does not record the original endianness of integer values, we need to ensure that it doesn't change between write and load.
Diffstat (limited to 'libsecret')
-rw-r--r--libsecret/secret-file-collection.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/libsecret/secret-file-collection.c b/libsecret/secret-file-collection.c
index 8ffb542..2e90e3c 100644
--- a/libsecret/secret-file-collection.c
+++ b/libsecret/secret-file-collection.c
@@ -287,7 +287,9 @@ on_load_contents (GObject *source_object,
GVariant *variant;
GVariant *salt_array;
guint32 salt_size;
+ guint32 iteration_count;
guint64 modified_time;
+ guint64 usage_count;
gconstpointer data;
gsize n_data;
GError *error = NULL;
@@ -365,11 +367,18 @@ on_load_contents (GObject *source_object,
g_free,
contents);
g_variant_get (variant, "(u@ayutu@a(a{say}ay))",
- &salt_size, &salt_array, &self->iteration_count,
- &modified_time, &self->usage_count,
+ &salt_size, &salt_array, &iteration_count,
+ &modified_time, &usage_count,
&self->items);
+ salt_size = GUINT32_FROM_LE(salt_size);
+ iteration_count = GUINT32_FROM_LE(iteration_count);
+ modified_time = GUINT64_FROM_LE(modified_time);
+ usage_count = GUINT32_FROM_LE(usage_count);
+
+ self->iteration_count = iteration_count;
self->modified = g_date_time_new_from_unix_utc (modified_time);
+ self->usage_count = usage_count;
data = g_variant_get_fixed_array (salt_array, &n_data, sizeof(guint8));
g_assert (n_data == salt_size);
@@ -796,11 +805,11 @@ secret_file_collection_write (SecretFileCollection *self,
g_bytes_get_size (self->salt),
sizeof(guint8));
variant = g_variant_new ("(u@ayutu@a(a{say}ay))",
- g_bytes_get_size (self->salt),
+ GUINT32_TO_LE(g_bytes_get_size (self->salt)),
salt_array,
- self->iteration_count,
- g_date_time_to_unix (self->modified),
- self->usage_count,
+ GUINT32_TO_LE(self->iteration_count),
+ GUINT64_TO_LE(g_date_time_to_unix (self->modified)),
+ GUINT32_TO_LE(self->usage_count),
self->items);
g_variant_get_data (variant); /* force serialize */