Просмотр исходного кода

Merge trunk revision 2513:
r2513 | asalkeld | 2009-10-11 16:46:07 -0700 (Sun, 11 Oct 2009) | 2 lines

Test the key value size for typed keys.



git-svn-id: http://svn.fedorahosted.org/svn/corosync/branches/flatiron@2587 fd59a12c-fef9-0310-b244-a6a79926bd2f

Steven Dake 16 лет назад
Родитель
Сommit
2b620c5c30
1 измененных файлов с 40 добавлено и 1 удалено
  1. 40 1
      exec/objdb.c

+ 40 - 1
exec/objdb.c

@@ -513,15 +513,54 @@ static int object_key_create_typed(
 	int found = 0;
 	int found = 0;
 	int i;
 	int i;
 	size_t key_len = strlen(key_name);
 	size_t key_len = strlen(key_name);
+	size_t expected_size;
+	int test_size_by_type = CS_TRUE;
 
 
 	objdb_rdlock();
 	objdb_rdlock();
 
 
 	res = hdb_handle_get (&object_instance_database,
 	res = hdb_handle_get (&object_instance_database,
-		object_handle, (void *)&instance);
+			  object_handle, (void *)&instance);
 	if (res != 0) {
 	if (res != 0) {
 		goto error_exit;
 		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
 	 * Do validation check if validation is configured for the parent object
 	 */
 	 */