Merge pull request #20 from federicomenaquintero/master

Some malloc() checks and a leak fix.
This commit is contained in:
Al Barrentine
2016-02-25 16:22:23 -05:00
3 changed files with 35 additions and 3 deletions

View File

@@ -23,6 +23,10 @@
*/
geoname_t *geoname_new(void) {
geoname_t *self = malloc(sizeof(geoname_t));
if (self == NULL) {
return NULL;
}
self->name = char_array_new_size(GEONAMES_NAME_DEFAULT_LENGTH);
self->canonical = char_array_new_size(GEONAMES_NAME_DEFAULT_LENGTH);
@@ -36,6 +40,14 @@ geoname_t *geoname_new(void) {
self->admin3_code = char_array_new_size(GEONAMES_ADMIN3_CODE_DEFAULT_LENGTH);
self->admin4_code = char_array_new_size(GEONAMES_ADMIN4_CODE_DEFAULT_LENGTH);
if (!(self->name && self->canonical && self->iso_language
&& self->feature_code && self->country_code
&& self->admin1_code && self->admin2_code
&& self->admin3_code && self->admin4_code)) {
geoname_destroy(self);
return NULL;
}
return self;
}
@@ -273,6 +285,10 @@ void geoname_print(geoname_t *self) {
gn_postal_code_t *gn_postal_code_new(void) {
gn_postal_code_t *self = malloc(sizeof(gn_postal_code_t));
if (self == NULL) {
return NULL;
}
self->postal_code = char_array_new_size(GEONAMES_POSTAL_CODE_DEFAULT_LENGTH);
self->country_code = char_array_new_size(GEONAMES_COUNTRY_CODE_DEFAULT_LENGTH);
self->containing_geoname = char_array_new_size(GEONAMES_NAME_DEFAULT_LENGTH);
@@ -284,6 +300,12 @@ gn_postal_code_t *gn_postal_code_new(void) {
self->admin2_ids = uint32_array_new_size(GEONAMES_POSTAL_ADMIN2_IDS_DEFAULT_LENGTH);
self->admin3_ids = uint32_array_new_size(GEONAMES_POSTAL_ADMIN3_IDS_DEFAULT_LENGTH);
if (!(self->postal_code && self->country_code && self->containing_geoname
&& self->admin1_ids && self->admin2_ids && self->admin3_ids)) {
gn_postal_code_destroy(self);
return NULL;
}
return self;
}

View File

@@ -146,6 +146,9 @@ static numex_language_t *numex_language_read(FILE *f) {
}
char *name = malloc(lang_name_len);
if (name == NULL) {
return NULL;
}
if (!file_read_chars(f, name, lang_name_len)) {
return NULL;
@@ -326,6 +329,9 @@ static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
}
char *key = malloc(key_len);
if (key == NULL) {
return NULL;
}
if (!file_read_chars(f, key, key_len)) {
return NULL;
@@ -347,6 +353,9 @@ static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
}
char *ordinal_suffix = malloc(ordinal_suffix_len);
if (ordinal_suffix == NULL) {
return NULL;
}
if (!file_read_chars(f, ordinal_suffix, ordinal_suffix_len)) {
return NULL;

View File

@@ -26,8 +26,6 @@ uint8_t DEFAULT_ALPHABET[] = {
13, 17, 21, 25, 29, 210, 214, 93, 222, 234, 238, 242, 246, 250, 125, 255
};
#define DEFAULT_ALPHABET_SIZE sizeof(DEFAULT_ALPHABET)
/*
Constructors
@@ -1016,7 +1014,7 @@ trie_t *trie_read(FILE *file) {
uint32_t num_keys;
if (!file_read_uint32(file, &num_keys)) {
goto exit_file_read;
goto exit_trie_created;
}
trie->num_keys = num_keys;
@@ -1037,6 +1035,9 @@ trie_t *trie_read(FILE *file) {
unsigned char *buf;
size_t buf_size = num_nodes * sizeof(uint32_t) * 2;
buf = malloc(buf_size);
if (buf == NULL) {
goto exit_trie_created;
}
unsigned char *buf_ptr;