dereferencing freed memory

This commit is contained in:
Ron Pedde 2004-10-10 11:24:02 +00:00
parent e600a30528
commit 491e7f8b57

View File

@ -966,17 +966,15 @@ ENUMHANDLE db_enum_begin(void) {
if(!pkey) if(!pkey)
return NULL; return NULL;
static datum key;
db_writelock(); db_writelock();
*pkey=gdbm_firstkey(db_songs); *pkey=gdbm_firstkey(db_songs);
return (ENUMHANDLE)pkey; return (ENUMHANDLE)pkey;
} }
MP3FILE *db_enum(ENUMHANDLE *current) { MP3FILE *db_enum(ENUMHANDLE *current) {
datum *pkey = *current; datum *pkey = *current;
datum next;
datum data; datum data;
static MP3FILE mp3; static MP3FILE mp3;
@ -988,8 +986,11 @@ MP3FILE *db_enum(ENUMHANDLE *current) {
if(db_unpackrecord(&data,&mp3)) if(db_unpackrecord(&data,&mp3))
DPRINTF(ERR_FATAL,"Cannot unpack item... corrupt database?\n"); DPRINTF(ERR_FATAL,"Cannot unpack item... corrupt database?\n");
free(data.dptr);
next = gdbm_nextkey(db_songs,*pkey);
free(pkey->dptr); free(pkey->dptr);
*pkey = gdbm_nextkey(db_songs,*pkey); *pkey=next;
return &mp3; return &mp3;
} }
@ -998,7 +999,14 @@ MP3FILE *db_enum(ENUMHANDLE *current) {
} }
int db_enum_end(ENUMHANDLE handle) { int db_enum_end(ENUMHANDLE handle) {
datum *pkey = handle;
if(pkey->dptr)
free(pkey->dptr);
db_unlock(); db_unlock();
free(pkey);
return 0; return 0;
} }