Skip to content

Commit

Permalink
[#295] Support GCC -fanalyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
jesperpedersen committed May 14, 2024
1 parent 3272318 commit 211057c
Show file tree
Hide file tree
Showing 6 changed files with 251 additions and 40 deletions.
66 changes: 59 additions & 7 deletions src/libpgmoneta/aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,13 +276,13 @@ pgmoneta_decrypt_directory(char* d, struct workers* workers)
char* from = NULL;
char* to = NULL;
char* name = NULL;
DIR* dir;
DIR* dir = NULL;
struct dirent* entry;

if (!(dir = opendir(d)))
{
pgmoneta_log_error("pgmoneta_decrypt_directory: Could not open directory %s", d);
return 1;
goto error;
}

while ((entry = readdir(dir)) != NULL)
Expand Down Expand Up @@ -313,6 +313,12 @@ pgmoneta_decrypt_directory(char* d, struct workers* workers)
from = pgmoneta_append(from, entry->d_name);

name = malloc(strlen(entry->d_name) - 3);

if (name == NULL)
{
goto error;
}

memset(name, 0, strlen(entry->d_name) - 3);
memcpy(name, entry->d_name, strlen(entry->d_name) - 4);

Expand Down Expand Up @@ -343,6 +349,15 @@ pgmoneta_decrypt_directory(char* d, struct workers* workers)

closedir(dir);
return 0;

error:

if (dir != NULL)
{
closedir(dir);
}

return 1;
}

static void
Expand Down Expand Up @@ -371,18 +386,33 @@ pgmoneta_decrypt_archive(char* path)
}

to = malloc(strlen(path) - 3);

if (to == NULL)
{
goto error;
}

memset(to, 0, strlen(path) - 3);
memcpy(to, path, strlen(path) - 4);

if (encrypt_file(path, to, 0))
{
pgmoneta_log_error("pgmoneta_decrypt_archive: error on decrypt file");
return 1;
goto error;
}

pgmoneta_delete_file(path, NULL);

free(to);

return 0;

error:

pgmoneta_log_error("pgmoneta_decrypt_archive: error on decrypt file");

free(to);

return 1;
}

int
Expand Down Expand Up @@ -460,6 +490,12 @@ aes_encrypt(char* plaintext, unsigned char* key, unsigned char* iv, char** ciphe

size = strlen(plaintext) + EVP_CIPHER_block_size(cipher_fp());
ct = malloc(size);

if (ct == NULL)
{
goto error;
}

memset(ct, 0, size);

if (EVP_EncryptUpdate(ctx,
Expand Down Expand Up @@ -519,6 +555,12 @@ aes_decrypt(char* ciphertext, int ciphertext_length, unsigned char* key, unsigne

size = ciphertext_length + EVP_CIPHER_block_size(cipher_fp());
pt = malloc(size);

if (pt == NULL)
{
goto error;
}

memset(pt, 0, size);

if (EVP_DecryptUpdate(ctx,
Expand Down Expand Up @@ -638,7 +680,7 @@ encrypt_file(char* from, char* to, int enc)
}

out = fopen(to, "w");
if (in == NULL)
if (out == NULL)
{
pgmoneta_log_error("fopen: Could not open %s", to);
goto error;
Expand Down Expand Up @@ -699,8 +741,18 @@ encrypt_file(char* from, char* to, int enc)
{
EVP_CIPHER_CTX_free(ctx);
}

free(master_key);
fclose(in);
fclose(out);

if (in != NULL)
{
fclose(in);
}

if (out != NULL)
{
fclose(out);
}

return 1;
}
14 changes: 14 additions & 0 deletions src/libpgmoneta/bzip2_compression.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,12 @@ pgmoneta_bunzip2_data(char* directory, struct workers* workers)
from = pgmoneta_append(from, entry->d_name);

name = malloc(strlen(entry->d_name) - 2);

if (name == NULL)
{
goto error;
}

memset(name, 0, strlen(entry->d_name) - 2);
memcpy(name, entry->d_name, strlen(entry->d_name) - 3);

Expand Down Expand Up @@ -327,6 +333,14 @@ pgmoneta_bunzip2_data(char* directory, struct workers* workers)
}

closedir(dir);
return;

error:

if (dir != NULL)
{
closedir(dir);
}
}

static void
Expand Down
39 changes: 35 additions & 4 deletions src/libpgmoneta/configuration.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ pgmoneta_read_configuration(void* shm, char* filename)
size_t max;
struct configuration* config;
int idx_server = 0;
struct server srv;
struct server srv = {0};

file = fopen(filename, "r");

Expand Down Expand Up @@ -1977,13 +1977,13 @@ extract_key_value(char* str, char** key, char** value)
*key = NULL;
*value = NULL;

memset(left, 0, sizeof(left));
memset(right, 0, sizeof(right));

equal = strchr(str, '=');

if (equal != NULL)
{
memset(&left[0], 0, sizeof(left));
memset(&right[0], 0, sizeof(right));

i = 0;
while (true)
{
Expand Down Expand Up @@ -2075,14 +2075,32 @@ extract_key_value(char* str, char** key, char** value)
}

k = calloc(1, strlen(left) + 1);

if (k == NULL)
{
goto error;
}

v = calloc(1, strlen(right) + 1);

if (v == NULL)
{
goto error;
}

memcpy(k, left, strlen(left));
memcpy(v, right, strlen(right));

*key = k;
*value = v;
}

return;

error:

free(k);
free(v);
}

static int
Expand Down Expand Up @@ -2172,6 +2190,12 @@ as_logging_level(char* str)
{
size = strlen(str) - strlen("debug");
debug_value = (char*)malloc(size + 1);

if (debug_value == NULL)
{
goto done;
}

memset(debug_value, 0, size + 1);
memcpy(debug_value, str + 5, size);
if (as_int(debug_value, &debug_level))
Expand Down Expand Up @@ -2224,6 +2248,8 @@ as_logging_level(char* str)
return PGMONETA_LOGGING_LEVEL_FATAL;
}

done:

return PGMONETA_LOGGING_LEVEL_INFO;
}

Expand Down Expand Up @@ -2316,6 +2342,11 @@ as_retention(char* str, int* days, int* weeks, int* months, int* years)
// make a deep copy because the parsing break the input string
char* copied_str = (char*)malloc(strlen(str) + 1);

if (copied_str == NULL)
{
goto error;
}

memset(copied_str, 0, strlen(str) + 1);
memcpy(copied_str, str, strlen(str));

Expand Down
16 changes: 15 additions & 1 deletion src/libpgmoneta/gzip_compression.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,12 @@ pgmoneta_gunzip_data(char* directory, struct workers* workers)
from = pgmoneta_append(from, entry->d_name);

name = malloc(strlen(entry->d_name) - 2);

if (name == NULL)
{
goto error;
}

memset(name, 0, strlen(entry->d_name) - 2);
memcpy(name, entry->d_name, strlen(entry->d_name) - 3);

Expand Down Expand Up @@ -351,6 +357,14 @@ pgmoneta_gunzip_data(char* directory, struct workers* workers)
}

closedir(dir);
return;

error:

if (dir != NULL)
{
closedir(dir);
}
}

static void
Expand Down Expand Up @@ -497,7 +511,7 @@ gz_decompress(char* from, char* to)
}

out = fopen(to, "wb");
if (in == NULL)
if (out == NULL)
{
goto error;
}
Expand Down

0 comments on commit 211057c

Please sign in to comment.