Fix Issue #35 - ask for capability size. Too small size could cause errors (#280)

* Fix Issue #35 - ask for capability size. Too small size could cause errors

* Fix Issue #35 - Review fixes

* Fix Issue #35 - Review fixes - build issues fixed
This commit is contained in:
Grzegorz Wawiorko
2019-05-23 19:19:37 +02:00
committed by Kévin Petit
parent 8dc3ae30d0
commit 171c35429a
5 changed files with 52 additions and 31 deletions

View File

@@ -75,7 +75,7 @@ typedef union
size_t sizet;
size_t sizet_arr[3];
cl_ulong ull;
char string[1024];
char * string;
cl_device_svm_capabilities svmCapabilities;
} config_data;
@@ -324,6 +324,7 @@ int getConfigInfo(cl_device_id device, config_info* info)
{
int err = CL_SUCCESS;
int size_err = 0;
size_t config_size_set;
size_t config_size_ret;
switch(info->config_type)
{
@@ -376,7 +377,13 @@ int getConfigInfo(cl_device_id device, config_info* info)
size_err = config_size_ret != sizeof(info->config.ull);
break;
case type_string:
err = clGetDeviceInfo(device, info->opcode, sizeof(info->config.string), &info->config.string, &config_size_ret);
err = clGetDeviceInfo(device, info->opcode, 0, NULL, &config_size_set);
info->config.string = NULL;
if (err == CL_SUCCESS && config_size_set > 0) {
info->config.string = (char*)malloc(config_size_set);
err = clGetDeviceInfo(device, info->opcode, config_size_set, info->config.string, &config_size_ret);
size_err = config_size_set != config_size_ret;
}
break;
case type_cl_device_svm_capabilities:
err = clGetDeviceInfo(device, info->opcode, sizeof(info->config.svmCapabilities), &info->config.svmCapabilities, &config_size_ret);
@@ -524,7 +531,7 @@ void dumpConfigInfo(cl_device_id device, config_info* info)
log_info("\t%s == %lld\n", info->opcode_name, info->config.ull);
break;
case type_string:
log_info("\t%s == \"%s\"\n", info->opcode_name, info->config.string);
log_info("\t%s == \"%s\"\n", info->opcode_name, info->config.string ? info->config.string : "");
break;
case type_cl_device_svm_capabilities:
log_info("\t%s == %s|%s|%s|%s\n", info->opcode_name,
@@ -679,15 +686,20 @@ int getConfigInfos( cl_device_id device )
err = parseVersion( info.config.string, & version );
if ( err ) {
total_errors++;
free(info.config.string);
break;
}
} else if ( info.opcode == CL_DEVICE_EXTENSIONS ) {
err = parseExtensions( info.config.string, & extensions );
if ( err ) {
total_errors++;
free(info.config.string);
break;
}
}
if (info.config_type == type_string) {
free(info.config.string);
}
} else {
total_errors++;
}