Merge pull request #20 from federicomenaquintero/master
Some malloc() checks and a leak fix.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user