From e66297a8860c18ff2f9005d003ec2a2c700366a8 Mon Sep 17 00:00:00 2001 From: Angus Salkeld Date: Sun, 11 Oct 2009 23:46:07 +0000 Subject: [PATCH] Test the key value size for typed keys. git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2513 fd59a12c-fef9-0310-b244-a6a79926bd2f --- exec/objdb.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/exec/objdb.c b/exec/objdb.c index 726b302a..33344604 100644 --- a/exec/objdb.c +++ b/exec/objdb.c @@ -513,15 +513,54 @@ static int object_key_create_typed( int found = 0; int i; size_t key_len = strlen(key_name); + size_t expected_size; + int test_size_by_type = CS_TRUE; objdb_rdlock(); res = hdb_handle_get (&object_instance_database, - object_handle, (void *)&instance); + object_handle, (void *)&instance); if (res != 0) { goto error_exit; } + switch (value_type) { + case OBJDB_VALUETYPE_INT16: + expected_size = sizeof (int16_t); + break; + case OBJDB_VALUETYPE_UINT16: + expected_size = sizeof (uint16_t); + break; + case OBJDB_VALUETYPE_INT32: + expected_size = sizeof (int32_t); + break; + case OBJDB_VALUETYPE_UINT32: + expected_size = sizeof (uint32_t); + break; + case OBJDB_VALUETYPE_INT64: + expected_size = sizeof (int64_t); + break; + case OBJDB_VALUETYPE_UINT64: + expected_size = sizeof (uint64_t); + break; + case OBJDB_VALUETYPE_FLOAT: + expected_size = sizeof (float); + break; + case OBJDB_VALUETYPE_DOUBLE: + expected_size = sizeof (double); + break; + case OBJDB_VALUETYPE_ANY: + default: + test_size_by_type = CS_FALSE; + break; + } + if (test_size_by_type) { + if (expected_size != value_len) { + //printf ("%s exp:%d != len:%d\n", key_name, expected_size, value_len); + goto error_put; + } + } + /* * Do validation check if validation is configured for the parent object */