From: Sean E. <sea...@us...> - 2002-12-14 02:41:22
|
Update of /cvsroot/gaim/gaim/src In directory sc8-pr-cvs1:/tmp/cvs-serv16136/src Modified Files: Tag: gtk1-stable perl.c Log Message: From David Kaelbling: Running gaim/0.59.6 on SGI IRIX 6.5, I had problems with memory corruption until I made the attached change. Basically when calling readdir_r the buffer you supply should not be just a 'struct dirent' -- it must be padded to the maximum allowed name length. Index: perl.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/perl.c,v retrieving revision 1.72.2.2 retrieving revision 1.72.2.3 diff -u -d -r1.72.2.2 -r1.72.2.3 --- perl.c 26 Aug 2002 02:01:36 -0000 1.72.2.2 +++ perl.c 14 Dec 2002 02:41:17 -0000 1.72.2.3 @@ -178,14 +178,15 @@ { DIR *dir; struct dirent *ent; - struct dirent dirent_buf; + struct dirent *dirent_buf; char *buf; char *path; path = gaim_user_dir(); dir = opendir(path); if (dir) { - while ((readdir_r(dir,&dirent_buf,&ent),ent)) { + dirent_buf = g_malloc(sizeof(struct dirent) + NAME_MAX); + while ((readdir_r(dir,dirent_buf,&ent),ent)) { if (strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..")) { if (is_pl_file(ent->d_name)) { buf = g_malloc(strlen(path) + strlen(ent->d_name) + 2); @@ -196,6 +197,7 @@ } } closedir(dir); + g_free(dirent_buf); } g_free(path); } |