BASH PATCH REPORT ================= Bash-Release: 3.0 Patch-ID: bash30-010 Bug-Reported-by: Samuel Thibault Bug-Reference-ID: Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=261142 Bug-Description: When trying to auto-complete ~/../``/, I just get: malloc: bashline.c:1340: assertion botched free: start and end chunk sizes differ last command: kill -9 %2 Stopping myself... Patch: *** ../bash-3.0/bashline.c Mon Jul 5 23:22:12 2004 --- bashline.c Thu Sep 2 16:00:12 2004 *************** *** 101,104 **** --- 101,105 ---- /* Helper functions for Readline. */ + static int bash_directory_expansion __P((char **)); static int bash_directory_completion_hook __P((char **)); static int filename_completion_ignore __P((char **)); *************** *** 293,297 **** at = strchr (rl_completer_word_break_characters, '@'); if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0)) ! return; /* We have something to do. Do it. */ --- 294,298 ---- at = strchr (rl_completer_word_break_characters, '@'); if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0)) ! return old_value; /* We have something to do. Do it. */ *************** *** 1407,1414 **** if (*hint_text == '~') { ! int l, tl, vl; vl = strlen (val); tl = strlen (hint_text); l = vl - hint_len; /* # of chars added */ temp = (char *)xmalloc (l + 2 + tl); strcpy (temp, hint_text); --- 1408,1424 ---- if (*hint_text == '~') { ! int l, tl, vl, dl; ! char *rd; vl = strlen (val); tl = strlen (hint_text); + #if 0 l = vl - hint_len; /* # of chars added */ + #else + rd = savestring (filename_hint); + bash_directory_expansion (&rd); + dl = strlen (rd); + l = vl - dl; /* # of chars added */ + free (rd); + #endif temp = (char *)xmalloc (l + 2 + tl); strcpy (temp, hint_text); *************** *** 2188,2191 **** --- 2198,2222 ---- } + /* Simulate the expansions that will be performed by + rl_filename_completion_function. This must be called with the address of + a pointer to malloc'd memory. */ + static int + bash_directory_expansion (dirname) + char **dirname; + { + char *d; + + d = savestring (*dirname); + + if (rl_directory_rewrite_hook) + (*rl_directory_rewrite_hook) (&d); + + if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&d)) + { + free (*dirname); + *dirname = d; + } + } + /* Handle symbolic link references and other directory name expansions while hacking completion. */ *** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001 --- patchlevel.h Thu Sep 2 15:04:32 2004 *************** *** 26,30 **** looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 9 #endif /* _PATCHLEVEL_H_ */ --- 26,30 ---- looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 10 #endif /* _PATCHLEVEL_H_ */