From: <ny...@us...> - 2006-12-28 03:48:25
|
Revision: 213 http://svn.sourceforge.net/pmplib/?rev=213&view=rev Author: nyaochi Date: 2006-12-27 19:48:26 -0800 (Wed, 27 Dec 2006) Log Message: ----------- Fixed a crash bug. Modified Paths: -------------- trunk/pmplib/lib/pmp_iriverplus3/dat.c Modified: trunk/pmplib/lib/pmp_iriverplus3/dat.c =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/dat.c 2006-12-28 03:20:31 UTC (rev 212) +++ trunk/pmplib/lib/pmp_iriverplus3/dat.c 2006-12-28 03:48:26 UTC (rev 213) @@ -61,12 +61,14 @@ static void dat_entry_finish(dat_entry_t* entry) { - int i; - for (i = 0;i < entry->num_fields;++i) { - ip3db_variant_finish(&entry->fields[i]); + if (entry) { + int i; + for (i = 0;i < entry->num_fields;++i) { + ip3db_variant_finish(&entry->fields[i]); + } + free(entry->fields); + memset(entry, 0, sizeof(*entry)); } - free(entry->fields); - memset(entry, 0, sizeof(*entry)); } static size_t dat_entry_serialize(dat_entry_t* entry, uint8_t* block, uint8_t* q, uint32_t start, int is_storing) @@ -157,12 +159,16 @@ static void dat_list_finish(dat_list_t* list) { - uint32_t i; - for (i = 0;i < list->num_entries;++i) { - dat_entry_finish(&list->entries[i]); + if (list) { + if (list->entries) { + uint32_t i; + for (i = 0;i < list->num_entries;++i) { + dat_entry_finish(&list->entries[i]); + } + free(list->entries); + } + memset(list, 0, sizeof(*list)); } - free(list->entries); - memset(list, 0, sizeof(*list)); } static dat_entry_t *dat_list_expand(dat_list_t* list) @@ -190,7 +196,7 @@ /* Initialize fields according to db.dic when reading. */ if (!is_storing) { - dat_list_finish(list); + free(list->entries); list->entries = (dat_entry_t*)calloc(list->num_entries, sizeof(dat_entry_t)); for (i = 0;i < list->num_entries;++i) { dat_entry_init(&list->entries[i], dic_list); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |