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 *geoname_new(void) {
|
||||||
geoname_t *self = malloc(sizeof(geoname_t));
|
geoname_t *self = malloc(sizeof(geoname_t));
|
||||||
|
if (self == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
self->name = char_array_new_size(GEONAMES_NAME_DEFAULT_LENGTH);
|
self->name = char_array_new_size(GEONAMES_NAME_DEFAULT_LENGTH);
|
||||||
self->canonical = 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->admin3_code = char_array_new_size(GEONAMES_ADMIN3_CODE_DEFAULT_LENGTH);
|
||||||
self->admin4_code = char_array_new_size(GEONAMES_ADMIN4_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;
|
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 *gn_postal_code_new(void) {
|
||||||
gn_postal_code_t *self = malloc(sizeof(gn_postal_code_t));
|
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->postal_code = char_array_new_size(GEONAMES_POSTAL_CODE_DEFAULT_LENGTH);
|
||||||
self->country_code = char_array_new_size(GEONAMES_COUNTRY_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);
|
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->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);
|
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;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -146,6 +146,9 @@ static numex_language_t *numex_language_read(FILE *f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *name = malloc(lang_name_len);
|
char *name = malloc(lang_name_len);
|
||||||
|
if (name == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!file_read_chars(f, name, lang_name_len)) {
|
if (!file_read_chars(f, name, lang_name_len)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -326,6 +329,9 @@ static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *key = malloc(key_len);
|
char *key = malloc(key_len);
|
||||||
|
if (key == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!file_read_chars(f, key, key_len)) {
|
if (!file_read_chars(f, key, key_len)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -347,6 +353,9 @@ static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *ordinal_suffix = malloc(ordinal_suffix_len);
|
char *ordinal_suffix = malloc(ordinal_suffix_len);
|
||||||
|
if (ordinal_suffix == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!file_read_chars(f, ordinal_suffix, ordinal_suffix_len)) {
|
if (!file_read_chars(f, ordinal_suffix, ordinal_suffix_len)) {
|
||||||
return NULL;
|
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
|
13, 17, 21, 25, 29, 210, 214, 93, 222, 234, 238, 242, 246, 250, 125, 255
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_ALPHABET_SIZE sizeof(DEFAULT_ALPHABET)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Constructors
|
Constructors
|
||||||
@@ -1016,7 +1014,7 @@ trie_t *trie_read(FILE *file) {
|
|||||||
|
|
||||||
uint32_t num_keys;
|
uint32_t num_keys;
|
||||||
if (!file_read_uint32(file, &num_keys)) {
|
if (!file_read_uint32(file, &num_keys)) {
|
||||||
goto exit_file_read;
|
goto exit_trie_created;
|
||||||
}
|
}
|
||||||
|
|
||||||
trie->num_keys = num_keys;
|
trie->num_keys = num_keys;
|
||||||
@@ -1037,6 +1035,9 @@ trie_t *trie_read(FILE *file) {
|
|||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
size_t buf_size = num_nodes * sizeof(uint32_t) * 2;
|
size_t buf_size = num_nodes * sizeof(uint32_t) * 2;
|
||||||
buf = malloc(buf_size);
|
buf = malloc(buf_size);
|
||||||
|
if (buf == NULL) {
|
||||||
|
goto exit_trie_created;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned char *buf_ptr;
|
unsigned char *buf_ptr;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user