...
Code Block | ||
---|---|---|
| ||
... char *new_secret; size_t size = strlen(secret); if (size == SIZE_MAX) { /* Handle Error */ } new_secret = calloc(size+1,sizeof(char)); /* use calloc() to zero-out allocated space */ new_secret = calloc(size+1,sizeof(char)); if (!new_secret) { /* Handle Error */ } strcpy(new_secret, secret); /* Process new_secret... */ /* sanitize memory */ memset(new_secret, '\0', size); /* sanitize memory */ free(new_secret); ... |
Wiki Markup |
---|
The {{calloc()}} function ensures that the newly allocated memory has also be cleared. Because {{sizeof(char)}} is guaranteed to be 1, this solution does not need to check for a numeric overflow as a result of using {{calloc()}} \[[MEM37-C | MEM37-C. Ensure that size arguments to calloc() do not result in an integer overflow]\]. |
...
Code Block | ||
---|---|---|
| ||
... size_t secret_size; ... if (secret_size > SIZE_MAX/2) { /* handle error condition */ } /* calloc() initializes memory to zero */ temp_buff = calloc(secret_size * 2, sizeof(char)); /* calloc() initializes memory to zero */ if (temp_buff == NULL) { /* Handle Error */ } memcpy(temp_buff, secret, secret_size); /* sanitize the buffer */ memset(secret, '\0', secret_size); /* sanitize the buffer */ free(secret); secret = temp_buff; /* install the resized buffer */ temp_buff = NULL; ... |
...