From a44329c2442ff45d31fe7a0ca45005f145df3187 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 16 Aug 2018 15:36:32 +0100 Subject: [PATCH] Fix type of length returned by gvdb_table_get_names() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It should not be unsigned. The type in the on-disk format is gint32, so we need to return something at least as wide as that. However, we should not expose the implementation detail that the on-disk format is specifically gint32. Use a gsize, since that’s the normal type for array lengths — but check that we’re not on a platform where (somehow) gsize is smaller than gint32. Signed-off-by: Philip Withnall --- gvdb-reader.c | 7 +++++-- gvdb-reader.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gvdb-reader.c b/gvdb-reader.c index c2ee84d2b..ae349a62c 100644 --- a/gvdb-reader.c +++ b/gvdb-reader.c @@ -348,7 +348,7 @@ gvdb_table_list_from_item (GvdbTable *table, **/ gchar ** gvdb_table_get_names (GvdbTable *table, - gint *length) + gsize *length) { gchar **names; gint n_names; @@ -474,7 +474,10 @@ gvdb_table_get_names (GvdbTable *table, } if (length) - *length = n_names; + { + G_STATIC_ASSERT (sizeof (*length) >= sizeof (n_names)); + *length = n_names; + } return names; } diff --git a/gvdb-reader.h b/gvdb-reader.h index 39827737d..9bf627f4b 100644 --- a/gvdb-reader.h +++ b/gvdb-reader.h @@ -38,7 +38,7 @@ G_GNUC_INTERNAL void gvdb_table_free (GvdbTable *table); G_GNUC_INTERNAL gchar ** gvdb_table_get_names (GvdbTable *table, - gint *length); + gsize *length); G_GNUC_INTERNAL gchar ** gvdb_table_list (GvdbTable *table, const gchar *key);