diff options
author | Stef Walter <stef@memberwebs.com> | 2009-12-31 01:22:59 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2010-06-24 03:05:11 +0000 |
commit | e76c4996a36f2811f4f852573b655e7b284af2f3 (patch) | |
tree | 7ac0af4592bb4b1daa3aaa4554a88c8b2a8ed3b2 /egg/egg-asn1x.c | |
parent | f0033332d99e797ee3b5a1b2a1f1b155d73124d4 (diff) | |
download | gnome-keyring-e76c4996a36f2811f4f852573b655e7b284af2f3.tar.gz |
[egg] Implement some new asn1 tests, and fix problems.
Diffstat (limited to 'egg/egg-asn1x.c')
-rw-r--r-- | egg/egg-asn1x.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/egg/egg-asn1x.c b/egg/egg-asn1x.c index b1ecc59f..1c71e8fd 100644 --- a/egg/egg-asn1x.c +++ b/egg/egg-asn1x.c @@ -931,6 +931,9 @@ egg_asn1x_decode (GNode *asn, gconstpointer data, gsize n_data) if (!anode_decode_anything (asn, &tlv)) return FALSE; + if (tlv.end - tlv.buf != n_data) + return FALSE; + return egg_asn1x_validate (asn); } @@ -1820,7 +1823,7 @@ anode_read_boolean (GNode *node, Atlv *tlv, gboolean *value) return FALSE; if (tlv->buf[tlv->off] == 0x00) *value = FALSE; - if (tlv->buf[tlv->off] == 0xFF) + else if (tlv->buf[tlv->off] == 0xFF) *value = TRUE; else return FALSE; @@ -2003,7 +2006,8 @@ egg_asn1x_get_boolean (GNode *node, gboolean *value) g_return_val_if_fail (anode_def_type (node) == TYPE_BOOLEAN, FALSE); tlv = anode_get_tlv_data (node); - g_return_val_if_fail (tlv, FALSE); + if (tlv == NULL) + return FALSE; return anode_read_boolean (node, tlv, value); } @@ -2035,7 +2039,8 @@ egg_asn1x_get_integer_as_ulong (GNode *node, gulong *value) g_return_val_if_fail (anode_def_type (node) == TYPE_INTEGER, FALSE); tlv = anode_get_tlv_data (node); - g_return_val_if_fail (tlv, FALSE); + if (tlv == NULL) + return FALSE; return anode_read_integer_as_ulong(node, tlv, value); } @@ -2066,7 +2071,8 @@ egg_asn1x_get_raw_value (GNode *node, gsize *n_content) g_return_val_if_fail (n_content, NULL); tlv = anode_get_tlv_data (node); - g_return_val_if_fail (tlv, NULL); + if (tlv == NULL) + return FALSE; g_return_val_if_fail (!(tlv->cls & ASN1_CLASS_STRUCTURED), NULL); *n_content = tlv->len; @@ -2099,7 +2105,8 @@ egg_asn1x_get_string_as_raw (GNode *node, EggAllocator allocator, gsize *n_strin g_return_val_if_fail (type == TYPE_OCTET_STRING || type == TYPE_GENERALSTRING, NULL); tlv = anode_get_tlv_data (node); - g_return_val_if_fail (tlv, NULL); + if (tlv == NULL) + return NULL; if (!anode_read_string (node, tlv, NULL, &length)) return NULL; @@ -2182,7 +2189,8 @@ egg_asn1x_get_time_as_long (GNode *node) g_return_val_if_fail (anode_def_type (node) == TYPE_TIME, -1); tlv = anode_get_tlv_data (node); - g_return_val_if_fail (tlv, -1); + if (tlv == NULL) + return -1; if (!anode_read_time (node, tlv, &time)) return -1; @@ -2199,7 +2207,8 @@ egg_asn1x_get_oid_as_string (GNode *node) g_return_val_if_fail (anode_def_type (node) == TYPE_OBJECT_ID, NULL); tlv = anode_get_tlv_data (node); - g_return_val_if_fail (tlv, NULL); + if (tlv == NULL) + return NULL; if (!anode_read_object_id (node, tlv, &oid)) return NULL; |