#endif
+#define MAX_FILENAME_LEN 256
+
// this is RNG SEED for mask
static const CBT_UINT32 RNG_SEED = 0xa3e59cf2;
// this is RNG SEED for mask
m_data_name[0] = '\0';
if (NULL != data_name) {
- int data_name_len = strlen(data_name);
- memcpy(m_data_name, data_name, data_name_len);
- m_data_name[data_name_len] = '\0';
+ strncpy(m_data_name, data_name, sizeof(m_data_name));
+ m_data_name[sizeof(m_data_name)-1] = '\0';
}
m_options = options;
unsigned int& ret_size) {
#ifdef _SECOS_SIM_
*buffer = (unsigned char*)OsaMalloc(m_write_data_size);
- if (NULL == buffer) {
+ if (NULL == *buffer) {
//SLOGE("fail to alloc memory for data.");
return SS_RET_MALLOC_FAILED;
}
int secure_file::write_persistent_store(unsigned char* data,
unsigned int size) {
#ifdef _SECOS_SIM_
- char filename[256] = {0};
+ char filename[MAX_FILENAME_LEN] = {0};
get_data_name(filename, false);
int iRet = file_op::write_file(filename, data, size);
OsaFree(data);
int secure_file::read_persistent_store(unsigned char** buffer,
unsigned int& ret_size) {
#ifdef _SECOS_SIM_
- char filename[256] = {0};
+ char filename[MAX_FILENAME_LEN] = {0};
get_data_name(filename, false);
return file_op::read_file(filename, buffer, ret_size);
#else
int secure_file::remove_persistent_store(bool is_dir) {
#ifdef _SECOS_SIM_
- char filename[256] = {0};
+ char filename[MAX_FILENAME_LEN] = {0};
get_data_name(filename, is_dir);
int iret = SS_RET_SUCCESS;
if (is_dir) {
unsigned char* data = NULL;
unsigned int size = 0;
if (SS_RET_SUCCESS != (ret = serialize_data(&data, size))) {
+ free(data);
return ret;
}
#ifdef _SECOS_SIM_
#define SS_CRED_LEN 36
void secure_file::get_data_name(char* data_name, bool is_dir) {
- uint8_t* ptr = (uint8_t*)data_name;
- memcpy(ptr, SWD_SS_ROOT, strlen(SWD_SS_ROOT));
+ char* ptr = data_name;
+ strncpy(ptr, SWD_SS_ROOT, MAX_FILENAME_LEN - (ptr-data_name));
ptr += strlen(SWD_SS_ROOT);
// first 4 bytes for directory.
//byte_to_hex(ptr, (uint8_t*)m_full_path, 4);
- memcpy(ptr, m_full_path, SS_CRED_LEN);
+ strncpy(ptr, m_full_path, SS_CRED_LEN);
+ ptr[SS_CRED_LEN] = '\0';
if (is_dir) {
return;
}
// next 8 bytes for filename
- memcpy(ptr, m_full_path, strlen(m_full_path));
+ strncpy(ptr, m_full_path, MAX_FILENAME_LEN - (ptr-data_name));
+ data_name[MAX_FILENAME_LEN - 1] = '\0';
//memset(ptr, '/', 1);
//ptr += 1;
//memcpy(ptr,m_full_path+SS_CRED_LEN,)
return SS_RET_INVALID_PARAM;
}
- int uuid_size = strlen(uuid);
- int mn_size = strlen(module_name);
+ int uuid_size = strnlen(uuid, SS_MAX_UUID_LEN) + 1;
+ int mn_size = strnlen(module_name, SS_MAX_MODULE_NAME_LEN) + 1;
if (uuid_size > SS_MAX_UUID_LEN || mn_size > SS_MAX_MODULE_NAME_LEN) {
SLOGE("[%s] length of uuid or module name error.\n", __FUNCTION__);
return SS_RET_INVALID_PARAM;
}
- memset(cred->uuid, '\0', SS_MAX_UUID_LEN);
- memset(cred->module_name, '\0', SS_MAX_MODULE_NAME_LEN);
strncpy(cred->uuid, uuid, uuid_size);
strncpy(cred->module_name, module_name, mn_size);