Skip to content

Commit a9b1bcd

Browse files
author
Gonzalo Diaz
committed
[BUGFIX] Many issues "If memory allocation fails, then there is a possible null pointer dereference:" fixed.
1 parent e2640b2 commit a9b1bcd

5 files changed

Lines changed: 37 additions & 0 deletions

File tree

src/lib/exercises/src/hackerrank/warmup/compare_triplets.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ int *HACKERRANK_WARMUP_compareTriplets(int a_count, const int *a, int b_count,
1212

1313
*result_count = 2;
1414
int *awards = malloc(sizeof(int) * *result_count);
15+
if (awards == NULL) {
16+
return NULL;
17+
}
1518

1619
awards[0] = 0;
1720
awards[1] = 0;

src/lib/exercises/src/hackerrank/warmup/mini_max_sum.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,20 @@ char *HACKERRANK_WARMUP_miniMaxSumCalculate(int arr_count, const int *arr) {
2727

2828
const int BUFFER_MAX_SIZE = 100;
2929
char *buffer = malloc(BUFFER_MAX_SIZE * sizeof(char));
30+
if (buffer == NULL) {
31+
return NULL;
32+
}
3033

3134
snprintf(buffer, BUFFER_MAX_SIZE, "%lld %lld", tsum - tmax, tsum - tmin);
3235
return buffer;
3336
}
3437

3538
void HACKERRANK_WARMUP_miniMaxSum(int arr_count, const int *arr) {
3639
char *result = HACKERRANK_WARMUP_miniMaxSumCalculate(arr_count, arr);
40+
if (result == NULL) {
41+
return;
42+
}
43+
3744
printf("%s\n", result);
3845
free(result);
3946
}

src/lib/exercises/src/hackerrank/warmup/plus_minus.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ const int BUFFER_MAX_SIZE = 10;
1111

1212
char *format_result(double number) {
1313
char *buffer = malloc(BUFFER_MAX_SIZE * sizeof(char));
14+
if (buffer == NULL) {
15+
return NULL;
16+
}
1417

1518
snprintf(buffer, BUFFER_MAX_SIZE, "%0.6lf", number);
1619
return buffer;
@@ -45,9 +48,16 @@ char **HACKERRANK_WARMUP_plusMinusCalculate(int arr_count, const int *arr) {
4548

4649
int n = 3; // Número de strings (puede ser arbitrario)
4750
char **answer = malloc(n * sizeof(char *)); // Array de punteros
51+
if (answer == NULL) {
52+
return NULL;
53+
}
4854

4955
for (i = 0; i < n; i++) {
5056
char *formatted = format_result(results[i]);
57+
if (formatted == NULL) {
58+
HACKERRANK_WARMUP_freePlusMinus(answer, i);
59+
return NULL;
60+
}
5161
answer[i] = formatted;
5262
}
5363

@@ -63,6 +73,9 @@ void HACKERRANK_WARMUP_freePlusMinus(char **plusMinusAnswer, int n) {
6373

6474
void HACKERRANK_WARMUP_plusMinus(int arr_count, const int *arr) {
6575
char **output = HACKERRANK_WARMUP_plusMinusCalculate(arr_count, arr);
76+
if (output == NULL) {
77+
return;
78+
}
6679

6780
for (int i = 0; i < HACKERRANK_WARMUP_PLUSMINUS_LIMIT_ANSWERS; i++) {
6881
printf("%s", output[i]);

src/lib/exercises/src/hackerrank/warmup/staircase.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,16 @@
1010
char **HACKERRANK_WARMUP_staircaseCalculate(int n) {
1111

1212
char **answer = malloc(n * sizeof(char *)); // Array of char pointers
13+
if (answer == NULL) {
14+
return NULL;
15+
}
1316

1417
for (int i = 0; i < n; i++) {
1518
char *line = malloc((n + 1) * sizeof(char)); // Array of char values
19+
if (line == NULL) {
20+
HACKERRANK_WARMUP_freeStaircase(answer, i);
21+
return NULL;
22+
}
1623

1724
for (int j = 0; j < n; j++) {
1825
if (j < n - i - 1) {
@@ -38,6 +45,9 @@ void HACKERRANK_WARMUP_freeStaircase(char **staircase, int n) {
3845

3946
void HACKERRANK_WARMUP_staircase(int n) {
4047
char **output = HACKERRANK_WARMUP_staircaseCalculate(n);
48+
if (output == NULL) {
49+
return;
50+
}
4151

4252
for (int i = 0; i < n; i++) {
4353
printf("%s\n", output[i]);

src/lib/exercises/src/hackerrank/warmup/time_conversion.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ char *HACKERRANK_WARMUP_timeConversion(const char *s) {
5454
char *conversion =
5555
malloc((HACKERRANK_WARMUP_SHORT_TIME_FORMAT_SIZE + 1) * sizeof(char));
5656

57+
if (conversion == NULL) {
58+
return NULL;
59+
}
60+
5761
for (int i = 0; i < HACKERRANK_WARMUP_SHORT_TIME_FORMAT_SIZE; i++) {
5862
conversion[i] = s[i];
5963
}

0 commit comments

Comments
 (0)