Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset aa3ca1e in mainline


Ignore:
Timestamp:
2019-06-22T13:26:01Z (16 months ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Branches:
master
Children:
0d0f1a8
Parents:
f31ca47
Message:

adding tests if str_dup or callocs fail

Adding tests to ensure the stability of the code
according to the feedback. At multiple places
str_dup and callocs has been used without testing
if they returned NULL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/cmds/modules/alias/alias.c

    rf31ca47 raa3ca1e  
    6565}
    6666
    67 static void set_alias(const char *name, const char *value)
     67static errno_t set_alias(const char *name, const char *value)
    6868{
    6969        odlink_t *alias_link = odict_find_eq(&alias_dict, (void *)name, NULL);
     
    7474                free(data->value);
    7575                data->value = str_dup(value);
     76
     77                if (data->value == NULL) {
     78                        cli_error(CL_ENOMEM, "%s: failing to allocate memory for value\n", cmdname);
     79                        return ENOMEM;
     80                }
    7681        } else {
    7782                /* add new value */
    7883                alias_t *data = (alias_t *)calloc(1, sizeof(alias_t));
     84                if (data == NULL) {
     85                        cli_error(CL_ENOMEM, "%s: failing to allocate memory for data container\n", cmdname);
     86                        return ENOMEM;
     87                }
     88
    7989                data->name = str_dup(name);
     90                if (data->name == NULL) {
     91                        cli_error(CL_ENOMEM, "%s: failing to allocate memory for name\n", cmdname);
     92                        free(data);
     93                        return ENOMEM;
     94                }
     95
    8096                data->value = str_dup(value);
    81 
     97                if (data->value == NULL) {
     98                        cli_error(CL_ENOMEM, "%s: failing to allocate memory for value\n", cmdname);
     99                        free(data->name);
     100                        free(data);
     101                        return ENOMEM;
     102                }
    82103                odict_insert(&data->odict, &alias_dict, NULL);
    83104        }
     105
     106        return EOK;
    84107}
    85108
     
    131154        size_t i;
    132155        for (i = 1; argv[i] != NULL; i++) {
    133                 char *name = str_dup(argv[i]);
     156                char *name = argv[i];
    134157                char *value;
    135158                if ((value = str_chr(name, '=')) != NULL) {
    136159                        name[value - name] = '\0';
     160
    137161                        if (!validate_name(name)) {
    138162                                cli_error(CL_EFAIL, "%s: invalid alias name given\n", cmdname);
    139                                 free(name);
    140163                                return CMD_FAILURE;
    141164                        }
    142165
    143                         set_alias(name, value + 1);
     166                        if (set_alias(name, value + 1) != EOK) {
     167                                return CMD_FAILURE;
     168                        }
    144169                } else {
    145170                        if (!print_alias(name)) {
    146                                 free(name);
    147171                                return CMD_FAILURE;
    148172                        }
    149173                }
    150 
    151                 free(name);
    152174        }
    153175
Note: See TracChangeset for help on using the changeset viewer.