bash31-001 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. BASH PATCH REPORT
  2. =================
  3. Bash-Release: 3.1
  4. Patch-ID: bash31-001
  5. Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
  6. Bug-Reference-ID: <20051212015924.GA820@toucan.gentoo.org> <20051214034438.GK1863@toucan.gentoo.org>
  7. Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2005-12/msg00030.html http://lists.gnu.org/archive/html/bug-bash/2005-12/msg00041.html
  8. Bug-Description:
  9. There are parsing problems with compound assignments in several contexts,
  10. including as arguments to builtins like `local', `eval', and `let', and
  11. as multiple assignments in a single command.
  12. Patch:
  13. *** bash-3.1/parse.y Fri Nov 11 23:14:18 2005
  14. --- bash-3.1/parse.y Fri Dec 16 20:43:07 2005
  15. ***************
  16. *** 3696,3700 ****
  17. b = builtin_address_internal (token, 0);
  18. if (b && (b->flags & ASSIGNMENT_BUILTIN))
  19. ! parser_state |= PST_ASSIGNOK;
  20. }
  21. --- 3696,3702 ----
  22. b = builtin_address_internal (token, 0);
  23. if (b && (b->flags & ASSIGNMENT_BUILTIN))
  24. ! parser_state |= PST_ASSIGNOK;
  25. ! else if (STREQ (token, "eval") || STREQ (token, "let"))
  26. ! parser_state |= PST_ASSIGNOK;
  27. }
  28. ***************
  29. *** 4687,4691 ****
  30. {
  31. WORD_LIST *wl, *rl;
  32. ! int tok, orig_line_number, orig_token_size;
  33. char *saved_token, *ret;
  34. --- 4689,4693 ----
  35. {
  36. WORD_LIST *wl, *rl;
  37. ! int tok, orig_line_number, orig_token_size, orig_last_token, assignok;
  38. char *saved_token, *ret;
  39. ***************
  40. *** 4693,4696 ****
  41. --- 4695,4699 ----
  42. orig_token_size = token_buffer_size;
  43. orig_line_number = line_number;
  44. + orig_last_token = last_read_token;
  45. last_read_token = WORD; /* WORD to allow reserved words here */
  46. ***************
  47. *** 4699,4702 ****
  48. --- 4702,4707 ----
  49. token_buffer_size = 0;
  50. + assignok = parser_state&PST_ASSIGNOK; /* XXX */
  51. +
  52. wl = (WORD_LIST *)NULL; /* ( */
  53. parser_state |= PST_COMPASSIGN;
  54. ***************
  55. *** 4741,4745 ****
  56. }
  57. ! last_read_token = WORD;
  58. if (wl)
  59. {
  60. --- 4746,4750 ----
  61. }
  62. ! last_read_token = orig_last_token; /* XXX - was WORD? */
  63. if (wl)
  64. {
  65. ***************
  66. *** 4753,4756 ****
  67. --- 4758,4765 ----
  68. if (retlenp)
  69. *retlenp = (ret && *ret) ? strlen (ret) : 0;
  70. +
  71. + if (assignok)
  72. + parser_state |= PST_ASSIGNOK;
  73. +
  74. return ret;
  75. }
  76. *** bash-3.1/patchlevel.h Wed Jul 20 13:58:20 2005
  77. --- bash-3.1/patchlevel.h Wed Dec 7 13:48:42 2005
  78. ***************
  79. *** 26,30 ****
  80. looks for to find the patch level (for the sccs version string). */
  81. ! #define PATCHLEVEL 0
  82. #endif /* _PATCHLEVEL_H_ */
  83. --- 26,30 ----
  84. looks for to find the patch level (for the sccs version string). */
  85. ! #define PATCHLEVEL 1
  86. #endif /* _PATCHLEVEL_H_ */