Hello community, here is the log from the commit of package bash for openSUSE:12.1 checked in at 2011-10-26 15:20:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:12.1/bash (Old) and /work/SRC/openSUSE:12.1/.bash.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "bash", Maintainer is "werner@suse.com" Changes: -------- --- /work/SRC/openSUSE:12.1/bash/bash.changes 2011-10-24 12:29:09.000000000 +0200 +++ /work/SRC/openSUSE:12.1/.bash.new/bash.changes 2011-10-28 15:36:05.000000000 +0200 @@ -1,0 +2,11 @@ +Tue Oct 25 17:11:23 UTC 2011 - werner@suse.de + +- Add direxpand patch from upstream (bnc#725657) + +------------------------------------------------------------------- +Fri Oct 7 15:01:42 UTC 2011 - werner@suse.de + +- Add patch from upstream mailing list to avoid memory leak by + reassigning associative array variable + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bash-4.2-patches.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-4.2-patches/bash-4.2-assoc-reassign-memleak.patch new/bash-4.2-patches/bash-4.2-assoc-reassign-memleak.patch --- old/bash-4.2-patches/bash-4.2-assoc-reassign-memleak.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/bash-4.2-patches/bash-4.2-assoc-reassign-memleak.patch 2011-10-07 17:00:28.000000000 +0200 @@ -0,0 +1,14 @@ +*** ../bash-4.2-patched/assoc.c 2009-08-05 20:19:40.000000000 -0400 +--- assoc.c 2011-10-04 20:23:07.000000000 -0400 +*************** +*** 78,81 **** +--- 78,86 ---- + if (b == 0) + return -1; ++ /* If we are overwriting an existing element's value, we're not going to ++ use the key. Nothing in the array assignment code path frees the key ++ string, so we can free it here to avoid a memory leak. */ ++ if (b->key != key) ++ free (key); + FREE (b->data); + b->data = value ? savestring (value) : (char *)0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-4.2-patches/bash-4.2-pwd.patch new/bash-4.2-patches/bash-4.2-pwd.patch --- old/bash-4.2-patches/bash-4.2-pwd.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/bash-4.2-patches/bash-4.2-pwd.patch 2011-10-25 19:04:39.000000000 +0200 @@ -0,0 +1,394 @@ +*** ../bash-4.2-patched/bashline.c 2011-01-16 15:32:47.000000000 -0500 +--- bashline.c 2011-07-08 16:30:01.000000000 -0400 +*************** +*** 122,125 **** +--- 122,128 ---- + static int bash_push_line __P((void)); + ++ static rl_icppfunc_t *save_directory_hook __P((void)); ++ static void reset_directory_hook __P((rl_icppfunc_t *)); ++ + static void cleanup_expansion_error __P((void)); + static void maybe_make_readline_line __P((char *)); +*************** +*** 244,251 **** +--- 249,262 ---- + int dircomplete_spelling = 0; + ++ /* Expand directory names during word/filename completion. */ ++ int dircomplete_expand = 0; ++ + static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:"; + static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:"; + /* )) */ + ++ static const char *default_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ ++ static char *custom_filename_quote_characters = 0; ++ + static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL; + +*************** +*** 502,506 **** + /* Tell the completer that we might want to follow symbolic links or + do other expansion on directory names. */ +! rl_directory_rewrite_hook = bash_directory_completion_hook; + + rl_filename_rewrite_hook = bash_filename_rewrite_hook; +--- 513,517 ---- + /* Tell the completer that we might want to follow symbolic links or + do other expansion on directory names. */ +! set_directory_hook (); + + rl_filename_rewrite_hook = bash_filename_rewrite_hook; +*************** +*** 530,534 **** + + /* characters that need to be quoted when appearing in filenames. */ +! rl_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ + + rl_filename_quoting_function = bash_quote_filename; +--- 541,545 ---- + + /* characters that need to be quoted when appearing in filenames. */ +! rl_filename_quote_characters = default_filename_quote_characters; + + rl_filename_quoting_function = bash_quote_filename; +*************** +*** 565,570 **** + rl_attempted_completion_function = attempt_shell_completion; + rl_completion_entry_function = NULL; +- rl_directory_rewrite_hook = bash_directory_completion_hook; + rl_ignore_some_completions_function = filename_completion_ignore; + } + +--- 588,595 ---- + rl_attempted_completion_function = attempt_shell_completion; + rl_completion_entry_function = NULL; + rl_ignore_some_completions_function = filename_completion_ignore; ++ rl_filename_quote_characters = default_filename_quote_characters; ++ ++ set_directory_hook (); + } + +*************** +*** 1280,1283 **** +--- 1311,1316 ---- + rl_ignore_some_completions_function = filename_completion_ignore; + ++ rl_filename_quote_characters = default_filename_quote_characters; ++ + /* Determine if this could be a command word. It is if it appears at + the start of the line (ignoring preceding whitespace), or if it +*************** +*** 2694,2697 **** +--- 2754,2803 ---- + } + ++ /* Functions to save and restore the appropriate directory hook */ ++ /* This is not static so the shopt code can call it */ ++ void ++ set_directory_hook () ++ { ++ if (dircomplete_expand) ++ { ++ rl_directory_completion_hook = bash_directory_completion_hook; ++ rl_directory_rewrite_hook = (rl_icppfunc_t *)0; ++ } ++ else ++ { ++ rl_directory_rewrite_hook = bash_directory_completion_hook; ++ rl_directory_completion_hook = (rl_icppfunc_t *)0; ++ } ++ } ++ ++ static rl_icppfunc_t * ++ save_directory_hook () ++ { ++ rl_icppfunc_t *ret; ++ ++ if (dircomplete_expand) ++ { ++ ret = rl_directory_completion_hook; ++ rl_directory_completion_hook = (rl_icppfunc_t *)NULL; ++ } ++ else ++ { ++ ret = rl_directory_rewrite_hook; ++ rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; ++ } ++ ++ return ret; ++ } ++ ++ static void ++ restore_directory_hook (hookf) ++ rl_icppfunc_t *hookf; ++ { ++ if (dircomplete_expand) ++ rl_directory_completion_hook = hookf; ++ else ++ rl_directory_rewrite_hook = hookf; ++ } ++ + /* Handle symbolic link references and other directory name + expansions while hacking completion. This should return 1 if it modifies +*************** +*** 2703,2720 **** + { + char *local_dirname, *new_dirname, *t; +! int return_value, should_expand_dirname; + WORD_LIST *wl; + struct stat sb; + +! return_value = should_expand_dirname = 0; + local_dirname = *dirname; + +! if (mbschr (local_dirname, '$')) +! should_expand_dirname = 1; + else + { + t = mbschr (local_dirname, '`'); + if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0) +! should_expand_dirname = 1; + } + +--- 2809,2837 ---- + { + char *local_dirname, *new_dirname, *t; +! int return_value, should_expand_dirname, nextch, closer; + WORD_LIST *wl; + struct stat sb; + +! return_value = should_expand_dirname = nextch = closer = 0; + local_dirname = *dirname; + +! if (t = mbschr (local_dirname, '$')) +! { +! should_expand_dirname = '$'; +! nextch = t[1]; +! /* Deliberately does not handle the deprecated $[...] arithmetic +! expansion syntax */ +! if (nextch == '(') +! closer = ')'; +! else if (nextch == '{') +! closer = '}'; +! else +! nextch = 0; +! } + else + { + t = mbschr (local_dirname, '`'); + if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0) +! should_expand_dirname = '`'; + } + +*************** +*** 2740,2743 **** +--- 2857,2877 ---- + dispose_words (wl); + local_dirname = *dirname; ++ /* XXX - change rl_filename_quote_characters here based on ++ should_expand_dirname/nextch/closer. This is the only place ++ custom_filename_quote_characters is modified. */ ++ if (rl_filename_quote_characters && *rl_filename_quote_characters) ++ { ++ int i, j, c; ++ i = strlen (default_filename_quote_characters); ++ custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1); ++ for (i = j = 0; c = default_filename_quote_characters[i]; i++) ++ { ++ if (c == should_expand_dirname || c == nextch || c == closer) ++ continue; ++ custom_filename_quote_characters[j++] = c; ++ } ++ custom_filename_quote_characters[j] = '\0'; ++ rl_filename_quote_characters = custom_filename_quote_characters; ++ } + } + else +*************** +*** 3003,3012 **** + orig_func = rl_completion_entry_function; + orig_attempt_func = rl_attempted_completion_function; +- orig_dir_func = rl_directory_rewrite_hook; + orig_ignore_func = rl_ignore_some_completions_function; + orig_rl_completer_word_break_characters = rl_completer_word_break_characters; + rl_completion_entry_function = rl_filename_completion_function; + rl_attempted_completion_function = (rl_completion_func_t *)NULL; +- rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; + rl_ignore_some_completions_function = filename_completion_ignore; + rl_completer_word_break_characters = " \t\n\"\'"; +--- 3137,3147 ---- + orig_func = rl_completion_entry_function; + orig_attempt_func = rl_attempted_completion_function; + orig_ignore_func = rl_ignore_some_completions_function; + orig_rl_completer_word_break_characters = rl_completer_word_break_characters; ++ ++ orig_dir_func = save_directory_hook (); ++ + rl_completion_entry_function = rl_filename_completion_function; + rl_attempted_completion_function = (rl_completion_func_t *)NULL; + rl_ignore_some_completions_function = filename_completion_ignore; + rl_completer_word_break_characters = " \t\n\"\'"; +*************** +*** 3016,3023 **** + rl_completion_entry_function = orig_func; + rl_attempted_completion_function = orig_attempt_func; +- rl_directory_rewrite_hook = orig_dir_func; + rl_ignore_some_completions_function = orig_ignore_func; + rl_completer_word_break_characters = orig_rl_completer_word_break_characters; + + return r; + } +--- 3151,3159 ---- + rl_completion_entry_function = orig_func; + rl_attempted_completion_function = orig_attempt_func; + rl_ignore_some_completions_function = orig_ignore_func; + rl_completer_word_break_characters = orig_rl_completer_word_break_characters; + ++ restore_directory_hook (orig_dir_func); ++ + return r; + } +*** ../bash-4.2-patched/bashline.h 2009-01-04 14:32:22.000000000 -0500 +--- bashline.h 2011-07-08 16:22:22.000000000 -0400 +*************** +*** 34,41 **** +--- 34,46 ---- + extern int bash_re_edit __P((char *)); + ++ extern void bashline_set_event_hook __P((void)); ++ extern void bashline_reset_event_hook __P((void)); ++ + extern int bind_keyseq_to_unix_command __P((char *)); + + extern char **bash_default_completion __P((const char *, int, int, int, int)); + ++ void set_directory_hook __P((void)); ++ + /* Used by programmable completion code. */ + extern char *command_word_completion_function __P((const char *, int)); +*** ../bash-4.2-patched/builtins/shopt.def 2010-07-02 22:42:44.000000000 -0400 +--- builtins/shopt.def 2011-07-08 16:31:28.000000000 -0400 +*************** +*** 62,65 **** +--- 62,69 ---- + #include "bashgetopt.h" + ++ #if defined (READLINE) ++ # include "../bashline.h" ++ #endif ++ + #if defined (HISTORY) + # include "../bashhist.h" +*************** +*** 95,99 **** + extern int no_empty_command_completion; + extern int force_fignore; +! extern int dircomplete_spelling; + + extern int enable_hostname_completion __P((int)); +--- 100,104 ---- + extern int no_empty_command_completion; + extern int force_fignore; +! extern int dircomplete_spelling, dircomplete_expand; + + extern int enable_hostname_completion __P((int)); +*************** +*** 122,125 **** +--- 127,134 ---- + #endif + ++ #if defined (READLINE) ++ static int shopt_set_complete_direxpand __P((char *, int)); ++ #endif ++ + static int shopt_login_shell; + static int shopt_compat31; +*************** +*** 151,154 **** +--- 160,164 ---- + { "compat41", &shopt_compat41, set_compatibility_level }, + #if defined (READLINE) ++ { "direxpand", &dircomplete_expand, shopt_set_complete_direxpand }, + { "dirspell", &dircomplete_spelling, (shopt_set_func_t *)NULL }, + #endif +*************** +*** 536,539 **** +--- 547,561 ---- + } + ++ #if defined (READLINE) ++ static int ++ shopt_set_complete_direxpand (option_name, mode) ++ char *option_name; ++ int mode; ++ { ++ set_directory_hook (); ++ return 0; ++ } ++ #endif ++ + #if defined (RESTRICTED_SHELL) + /* Don't allow the value of restricted_shell to be modified. */ +*** ../bash-4.2-patched/doc/bash.1 2011-01-16 15:31:39.000000000 -0500 +--- doc/bash.1 2011-08-27 13:20:57.000000000 -0400 +*************** +*** 8949,8952 **** +--- 8993,9006 ---- + The default bash behavior remains as in previous versions. + .TP 8 ++ .B direxpand ++ If set, ++ .B bash ++ replaces directory names with the results of word expansion when performing ++ filename completion. This changes the contents of the readline editing ++ buffer. ++ If not set, ++ .B bash ++ attempts to preserve what the user typed. ++ .TP 8 + .B dirspell + If set, +*** ../bash-4.2-patched/doc/bashref.texi 2011-01-16 15:31:57.000000000 -0500 +--- doc/bashref.texi 2011-08-27 13:20:59.000000000 -0400 +*************** +*** 4536,4539 **** +--- 4561,4571 ---- + The default Bash behavior remains as in previous versions. + ++ @item direxpand ++ If set, Bash ++ replaces directory names with the results of word expansion when performing ++ filename completion. This changes the contents of the readline editing ++ buffer. ++ If not set, Bash attempts to preserve what the user typed. ++ + @item dirspell + If set, Bash +*** ../bash-4.2-patched/tests/shopt.right 2010-07-02 23:36:30.000000000 -0400 +--- tests/shopt.right 2011-09-02 09:24:27.000000000 -0400 +*************** +*** 13,16 **** +--- 13,17 ---- + shopt -u compat40 + shopt -u compat41 ++ shopt -u direxpand + shopt -u dirspell + shopt -u dotglob +*************** +*** 69,72 **** +--- 70,74 ---- + shopt -u compat40 + shopt -u compat41 ++ shopt -u direxpand + shopt -u dirspell + shopt -u dotglob +*************** +*** 102,105 **** +--- 104,108 ---- + compat40 off + compat41 off ++ direxpand off + dirspell off + dotglob off -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org