I worked around the segfault, and fixed a memory corruption bug that caused a different crash. Can the maintainer please consider this new version of the package?
http://shake.ath.cx:8080/~apw/debian/324803/ Here is the interdiff: diff -u cdw-0.2.4/debian/changelog cdw-0.2.4/debian/changelog --- cdw-0.2.4/debian/changelog +++ cdw-0.2.4/debian/changelog @@ -1,3 +1,10 @@ +cdw (0.2.4-3) unstable; urgency=low + + * Fix memory corruption. + * Work around getenv segfaults. (closes: #324803). + + -- Amos Waterland <[EMAIL PROTECTED]> Wed, 28 Mar 2007 23:00:08 +0000 + cdw (0.2.4-2) unstable; urgency=low * Remove circular dependency (closes: #340051). only in patch2: unchanged: --- cdw-0.2.4.orig/src/color.c +++ cdw-0.2.4/src/color.c @@ -85,7 +85,8 @@ int colors[20]; int i; - sprintf(line, "%s/.cdw.colors", getenv("HOME")); + extern char *getenv_HOME; + sprintf(line, "%s/.cdw.colors", getenv_HOME); if ((color_conf=fopen(line, "r"))==NULL) { init_pair(1, COLOR_CYAN, COLOR_BLUE); init_pair(2, COLOR_BLUE, COLOR_WHITE); only in patch2: unchanged: --- cdw-0.2.4.orig/src/gtkgui.c +++ cdw-0.2.4/src/gtkgui.c @@ -61,6 +61,8 @@ int select_window_gtk(bool real); void fill_info_gtk(); +extern char *getenv_HOME; + /*****************************/ @@ -956,7 +958,7 @@ if ( strlen(config.bootimg) ) { char bootimage[255]; - sprintf(bootimage, "%s/.cdw/%s", getenv("HOME"), config.bootimg); + sprintf(bootimage, "%s/.cdw/%s", getenv_HOME, config.bootimg); if ( (isofile=fopen(bootimage, "r"))==NULL ){ boot_exists=gtk_error_message(_("Boot image doesn't exist!")); boot_exists=0; @@ -1047,7 +1049,7 @@ if ( strlen(config.bootimg) ) { char bootimage[255]; - sprintf(bootimage, "%s/.cdw/%s", getenv("HOME"), config.bootimg); + sprintf(bootimage, "%s/.cdw/%s", getenv_HOME, config.bootimg); if ( (isofile=fopen(bootimage, "r"))==NULL ){ boot_exists=gtk_error_message(_("Boot image doesn't exist!")); boot_exists=0; @@ -1344,7 +1346,7 @@ bind_textdomain_codeset(PACKAGE, "UTF-8"); gtk_init(0, &argv); - sprintf(homedir,"%.225s/.cdw",getenv("HOME")); + sprintf(homedir,"%.225s/.cdw",getenv_HOME); mkdir(homedir,S_IRWXU); config=read_conf(); window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); only in patch2: unchanged: --- cdw-0.2.4.orig/src/main.c +++ cdw-0.2.4/src/main.c @@ -53,6 +53,7 @@ int select_window(bool real); int add_to_dic(); int menupos; +char *getenv_HOME; ITEM **items, **cditems; MENU *menu, *cdmenu; @@ -237,7 +238,7 @@ mvwaddch(addwin, 0, 2, ACS_RTEE); mvwprintw(addwin, 0, 3, " %s ", _("Add files")); waddch(addwin, ACS_LTEE); - sprintf(path,"%s",getenv("HOME")); + sprintf(path,"%s",getenv_HOME); load_dir(path, width, height); highlight(0, filei[menupos], 0); while ( (c=wgetch(addwin))!=27 ){ @@ -489,7 +490,7 @@ for (cnt=0; cnt<n; ++cnt){ ch=(char *) malloc(strlen(eps[cnt]->d_name)+strlen(dir)+4); sprintf(ch,"%s/%s",dir,eps[cnt]->d_name); - finfo=(struct stat *)malloc(sizeof(finfo)+100); + finfo=(struct stat *)malloc(sizeof(*finfo)+100); ok=lstat(ch,finfo); if ( (eps[cnt]->d_type=DT_DIR) ) dirsize(ch); @@ -1092,7 +1093,8 @@ /* Read config */ mtrace(); - sprintf(homedir,"%.225s/.cdw",getenv("HOME")); + getenv_HOME = getenv("HOME"); + sprintf(homedir,"%.225s/.cdw",getenv_HOME); mkdir(homedir,S_IRWXU); config=read_conf(); @@ -1338,7 +1340,7 @@ if ( strlen(config.bootimg) ) { char bootimage[255]; - sprintf(bootimage, "%s/.cdw/%s", getenv("HOME"), config.bootimg); + sprintf(bootimage, "%s/.cdw/%s", getenv_HOME, config.bootimg); if ( (isofile=fopen(bootimage, "r"))==NULL ){ boot_exists=dialogbox(_("Boot image doesn'n exists!"), _("Boot image error"), 0); boot_exists=0; @@ -1426,7 +1428,7 @@ if ( strlen(config.bootimg) ) { char bootimage[255]; - sprintf(bootimage, "%s/.cdw/%s", getenv("HOME"), config.bootimg); + sprintf(bootimage, "%s/.cdw/%s", getenv_HOME, config.bootimg); if ( (isofile=fopen(bootimage, "r"))==NULL ){ boot_exists=dialogbox(_("Boot image doesn'n exists!"), _("Boot image error"), 0); boot_exists=0; only in patch2: unchanged: --- cdw-0.2.4.orig/src/options.c +++ cdw-0.2.4/src/options.c @@ -49,7 +49,8 @@ FILE *conffile; char home[256], opt[41], prop[256]; - sprintf(home,"%.225s/.cdw.conf", getenv("HOME")); + extern char *getenv_HOME; + sprintf(home,"%.225s/.cdw.conf", getenv_HOME); if ( (conffile = fopen(home, "w")) != NULL ){ fprintf(conffile,"################################\n"); fprintf(conffile,"# cdw configuration file #\n"); @@ -100,8 +101,9 @@ char home[256], confhome[256], opt[41], prop[256]; int line=0; - sprintf(home,"%s", getenv("HOME")); - sprintf(confhome,"%s/.cdw.conf", getenv("HOME")); + extern char *getenv_HOME; + sprintf(home,"%s", getenv_HOME); + sprintf(confhome,"%s/.cdw.conf", getenv_HOME); strcpy(config.other,"\0"); strcpy(config.scsi,"0,0,0\0"); strcpy(config.cdrwdevice,"/dev/scd0\0"); -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]