From e9d2c2c88aacef29d9d35a690c37c2bbe4580bce Mon Sep 17 00:00:00 2001 From: ajacoutot Date: Tue, 16 Oct 2012 06:55:21 +0000 Subject: [PATCH] Better critical preconditions for invalid attributes, from upstream. --- x11/gnome/libsecret/Makefile | 3 +- .../patch-libsecret_secret-attributes_c | 50 +++++++++++ .../patches/patch-libsecret_secret-password_c | 86 +++++++++++++++++++ 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 x11/gnome/libsecret/patches/patch-libsecret_secret-attributes_c create mode 100644 x11/gnome/libsecret/patches/patch-libsecret_secret-password_c diff --git a/x11/gnome/libsecret/Makefile b/x11/gnome/libsecret/Makefile index 903600b4cec..8c4ebe1a6be 100644 --- a/x11/gnome/libsecret/Makefile +++ b/x11/gnome/libsecret/Makefile @@ -1,9 +1,10 @@ -# $OpenBSD: Makefile,v 1.13 2012/09/27 17:26:05 ajacoutot Exp $ +# $OpenBSD: Makefile,v 1.14 2012/10/16 06:55:21 ajacoutot Exp $ COMMENT= library for storing and retrieving passwords and secrets GNOME_PROJECT= libsecret GNOME_VERSION= 0.10 +REVISION= 0 SHARED_LIBS += secret-1 0.0 # unknown diff --git a/x11/gnome/libsecret/patches/patch-libsecret_secret-attributes_c b/x11/gnome/libsecret/patches/patch-libsecret_secret-attributes_c new file mode 100644 index 00000000000..c0827903d3d --- /dev/null +++ b/x11/gnome/libsecret/patches/patch-libsecret_secret-attributes_c @@ -0,0 +1,50 @@ +$OpenBSD: patch-libsecret_secret-attributes_c,v 1.1 2012/10/16 06:55:21 ajacoutot Exp $ + +From 7e02a594a77c2730efcc13dd141cc78e201cd7e3 Mon Sep 17 00:00:00 2001 +From: Stef Walter +Date: Fri, 12 Oct 2012 09:27:34 +0000 +Subject: Better critical preconditions for invalid attributes + +--- libsecret/secret-attributes.c.orig Wed Aug 8 07:48:25 2012 ++++ libsecret/secret-attributes.c Tue Oct 16 08:50:16 2012 +@@ -153,7 +153,7 @@ secret_attributes_buildv (const SecretSchema *schema, + } + + if (!type_found) { +- g_warning ("The attribute '%s' was not found in the password schema.", attribute_name); ++ g_critical ("The attribute '%s' was not found in the password schema.", attribute_name); + g_hash_table_unref (attributes); + return NULL; + } +@@ -165,8 +165,12 @@ secret_attributes_buildv (const SecretSchema *schema, + break; + case SECRET_SCHEMA_ATTRIBUTE_STRING: + string = va_arg (va, gchar *); ++ if (string == NULL) { ++ g_critical ("The value for attribute '%s' was NULL", attribute_name); ++ return NULL; ++ } + if (!g_utf8_validate (string, -1, NULL)) { +- g_warning ("The value for attribute '%s' was not a valid utf-8 string.", attribute_name); ++ g_critical ("The value for attribute '%s' was not a valid UTF-8 string.", attribute_name); + g_hash_table_unref (attributes); + return NULL; + } +@@ -177,7 +181,7 @@ secret_attributes_buildv (const SecretSchema *schema, + value = g_strdup_printf ("%d", integer); + break; + default: +- g_warning ("The password attribute '%s' has an invalid type in the password schema.", attribute_name); ++ g_critical ("The password attribute '%s' has an invalid type in the password schema.", attribute_name); + g_hash_table_unref (attributes); + return NULL; + } +@@ -220,7 +224,7 @@ _secret_attributes_validate (const SecretSchema *schem + } + + if (attribute == NULL) { +- g_critical ("%s: invalid %s attribute in for %s schema", ++ g_critical ("%s: invalid %s attribute for %s schema", + pretty_function, key, schema->name); + return FALSE; + } diff --git a/x11/gnome/libsecret/patches/patch-libsecret_secret-password_c b/x11/gnome/libsecret/patches/patch-libsecret_secret-password_c new file mode 100644 index 00000000000..f03aa523a01 --- /dev/null +++ b/x11/gnome/libsecret/patches/patch-libsecret_secret-password_c @@ -0,0 +1,86 @@ +$OpenBSD: patch-libsecret_secret-password_c,v 1.1 2012/10/16 06:55:21 ajacoutot Exp $ + +From 7e02a594a77c2730efcc13dd141cc78e201cd7e3 Mon Sep 17 00:00:00 2001 +From: Stef Walter +Date: Fri, 12 Oct 2012 09:27:34 +0000 +Subject: Better critical preconditions for invalid attributes + +--- libsecret/secret-password.c.orig Wed Aug 8 07:48:25 2012 ++++ libsecret/secret-password.c Tue Oct 16 08:50:16 2012 +@@ -94,6 +94,10 @@ secret_password_store (const SecretSchema *schema, + attributes = secret_attributes_buildv (schema, va); + va_end (va); + ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return; ++ + secret_password_storev (schema, attributes, collection, label, password, + cancellable, callback, user_data); + +@@ -225,6 +229,10 @@ secret_password_store_sync (const SecretSchema *schema + attributes = secret_attributes_buildv (schema, va); + va_end (va); + ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return FALSE; ++ + ret = secret_password_storev_sync (schema, attributes, collection, + label, password, cancellable, error); + +@@ -335,6 +343,10 @@ secret_password_lookup (const SecretSchema *schema, + attributes = secret_attributes_buildv (schema, va); + va_end (va); + ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return; ++ + secret_password_lookupv (schema, attributes, cancellable, + callback, user_data); + +@@ -468,6 +480,10 @@ secret_password_lookup_sync (const SecretSchema *schem + attributes = secret_attributes_buildv (schema, va); + va_end (va); + ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return NULL; ++ + password = secret_password_lookupv_sync (schema, attributes, + cancellable, error); + +@@ -516,6 +532,10 @@ secret_password_lookup_nonpageable_sync (const SecretS + attributes = secret_attributes_buildv (schema, va); + va_end (va); + ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return NULL; ++ + password = secret_password_lookupv_nonpageable_sync (schema, attributes, + cancellable, error); + +@@ -668,6 +688,10 @@ secret_password_clear (const SecretSchema *schema, + attributes = secret_attributes_buildv (schema, va); + va_end (va); + ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return; ++ + secret_password_clearv (schema, attributes, cancellable, + callback, user_data); + +@@ -768,6 +792,10 @@ secret_password_clear_sync (const SecretSchema* schema + va_start (va, error); + attributes = secret_attributes_buildv (schema, va); + va_end (va); ++ ++ /* Precondition failed, already warned */ ++ if (!attributes) ++ return FALSE; + + result = secret_password_clearv_sync (schema, attributes, + cancellable, error);