bash52-012.patch 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. BASH PATCH REPORT
  2. =================
  3. Bash-Release: 5.2
  4. Patch-ID: bash52-012
  5. Bug-Reported-by: Kerin Millar <kfm@plushkava.net>
  6. Bug-Reference-ID: <20221002095107.89561bc811e549b55644df11@plushkava.net>
  7. Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00001.html
  8. Bug-Description:
  9. When running in bash compatibility mode, nested command substitutions can
  10. leave the `extglob' option enabled.
  11. Patch (apply with `patch -p0'):
  12. *** /fs1/chet/scratch/bash-5.2.12/builtins/shopt.def 2022-11-07 10:31:42.000000000 -0500
  13. --- builtins/shopt.def 2022-10-14 09:30:11.000000000 -0400
  14. ***************
  15. *** 150,153 ****
  16. --- 150,158 ----
  17. #endif
  18. + #if defined (EXTENDED_GLOB)
  19. + int extglob_flag = EXTGLOB_DEFAULT;
  20. + static int shopt_set_extglob PARAMS((char *, int));
  21. + #endif
  22. +
  23. int expaliases_flag = 0;
  24. static int shopt_set_expaliases PARAMS((char *, int));
  25. ***************
  26. *** 207,211 ****
  27. #endif
  28. #if defined (EXTENDED_GLOB)
  29. ! { "extglob", &extended_glob, (shopt_set_func_t *)NULL },
  30. #endif
  31. { "extquote", &extended_quote, (shopt_set_func_t *)NULL },
  32. --- 212,216 ----
  33. #endif
  34. #if defined (EXTENDED_GLOB)
  35. ! { "extglob", &extglob_flag, shopt_set_extglob },
  36. #endif
  37. { "extquote", &extended_quote, (shopt_set_func_t *)NULL },
  38. ***************
  39. *** 378,382 ****
  40. #if defined (EXTENDED_GLOB)
  41. ! extended_glob = EXTGLOB_DEFAULT;
  42. #endif
  43. --- 383,387 ----
  44. #if defined (EXTENDED_GLOB)
  45. ! extended_glob = extglob_flag = EXTGLOB_DEFAULT;
  46. #endif
  47. ***************
  48. *** 644,647 ****
  49. --- 649,663 ----
  50. }
  51. + #if defined (EXTENDED_GLOB)
  52. + static int
  53. + shopt_set_extglob (option_name, mode)
  54. + char *option_name;
  55. + int mode;
  56. + {
  57. + extended_glob = extglob_flag;
  58. + return 0;
  59. + }
  60. + #endif
  61. +
  62. #if defined (READLINE)
  63. static int
  64. *** /fs1/chet/scratch/bash-5.2.12/builtins/common.h 2022-11-07 10:31:42.000000000 -0500
  65. --- builtins/common.h 2022-10-14 09:29:25.000000000 -0400
  66. ***************
  67. *** 258,261 ****
  68. --- 258,265 ----
  69. #endif
  70. + #if defined (EXTENDED_GLOB)
  71. + extern int extglob_flag;
  72. + #endif
  73. +
  74. extern int expaliases_flag;
  75. *** /fs1/chet/scratch/bash-5.2.12/execute_cmd.c 2022-11-07 10:31:42.000000000 -0500
  76. --- execute_cmd.c 2022-11-02 16:32:12.000000000 -0400
  77. ***************
  78. *** 3991,4001 ****
  79. #endif /* COND_REGEXP */
  80. {
  81. - int oe;
  82. - oe = extended_glob;
  83. extended_glob = 1;
  84. result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE)
  85. ? EXECUTION_SUCCESS
  86. : EXECUTION_FAILURE;
  87. ! extended_glob = oe;
  88. }
  89. if (arg1 != nullstr)
  90. --- 4015,4023 ----
  91. #endif /* COND_REGEXP */
  92. {
  93. extended_glob = 1;
  94. result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE)
  95. ? EXECUTION_SUCCESS
  96. : EXECUTION_FAILURE;
  97. ! extended_glob = extglob_flag;
  98. }
  99. if (arg1 != nullstr)
  100. *** /fs1/chet/scratch/bash-5.2.9/parse.y 2022-11-07 10:31:47.000000000 -0500
  101. --- parse.y 2022-11-14 11:27:22.000000000 -0500
  102. ***************
  103. *** 126,130 ****
  104. #if defined (EXTENDED_GLOB)
  105. ! extern int extended_glob;
  106. #endif
  107. --- 126,130 ----
  108. #if defined (EXTENDED_GLOB)
  109. ! extern int extended_glob, extglob_flag;
  110. #endif
  111. ***************
  112. *** 3305,3309 ****
  113. /* Reset to global value of extended glob */
  114. if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
  115. ! extended_glob = global_extglob;
  116. #endif
  117. if (parser_state & (PST_CMDSUBST|PST_STRING))
  118. --- 3321,3325 ----
  119. /* Reset to global value of extended glob */
  120. if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
  121. ! extended_glob = extglob_flag;
  122. #endif
  123. if (parser_state & (PST_CMDSUBST|PST_STRING))
  124. ***************
  125. *** 4125,4132 ****
  126. #if defined (EXTENDED_GLOB)
  127. /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
  128. ! conditional command and have already set global_extglob appropriately. */
  129. if (shell_compatibility_level <= 51 && was_extpat == 0)
  130. {
  131. ! local_extglob = global_extglob = extended_glob;
  132. extended_glob = 1;
  133. }
  134. --- 4143,4150 ----
  135. #if defined (EXTENDED_GLOB)
  136. /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
  137. ! conditional command and have already set extended_glob appropriately. */
  138. if (shell_compatibility_level <= 51 && was_extpat == 0)
  139. {
  140. ! local_extglob = extended_glob;
  141. extended_glob = 1;
  142. }
  143. ***************
  144. *** 4236,4240 ****
  145. sh_parser_state_t ps;
  146. sh_input_line_state_t ls;
  147. ! int orig_ind, nc, sflags, start_lineno;
  148. char *ret, *ep, *ostring;
  149. --- 4256,4260 ----
  150. sh_parser_state_t ps;
  151. sh_input_line_state_t ls;
  152. ! int orig_ind, nc, sflags, start_lineno, local_extglob;
  153. char *ret, *ep, *ostring;
  154. ***************
  155. *** 4279,4283 ****
  156. expand_aliases = 0;
  157. #if defined (EXTENDED_GLOB)
  158. ! global_extglob = extended_glob; /* for reset_parser() */
  159. #endif
  160. --- 4299,4303 ----
  161. expand_aliases = 0;
  162. #if defined (EXTENDED_GLOB)
  163. ! local_extglob = extended_glob;
  164. #endif
  165. ***************
  166. *** 4297,4300 ****
  167. --- 4317,4323 ----
  168. restore_parser_state (&ps);
  169. + #if defined (EXTENDED_GLOB)
  170. + extended_glob = local_extglob;
  171. + #endif
  172. token_to_read = 0;
  173. ***************
  174. *** 4732,4741 ****
  175. --- 4755,4768 ----
  176. /* rhs */
  177. + #if defined (EXTENDED_GLOB)
  178. local_extglob = extended_glob;
  179. if (parser_state & PST_EXTPAT)
  180. extended_glob = 1;
  181. + #endif
  182. tok = read_token (READ);
  183. + #if defined (EXTENDED_GLOB)
  184. if (parser_state & PST_EXTPAT)
  185. extended_glob = local_extglob;
  186. + #endif
  187. parser_state &= ~(PST_REGEXP|PST_EXTPAT);
  188. ***************
  189. *** 4784,4788 ****
  190. COND_COM *cexp;
  191. - global_extglob = extended_glob;
  192. cexp = cond_expr ();
  193. return (make_cond_command (cexp));
  194. --- 4811,4814 ----
  195. *** y.tab.c.save 2022-11-07 10:31:47.000000000 -0500
  196. --- y.tab.c 2022-11-18 15:58:03.000000000 -0500
  197. ***************
  198. *** 176,180 ****
  199. #if defined (EXTENDED_GLOB)
  200. ! extern int extended_glob;
  201. #endif
  202. --- 176,180 ----
  203. #if defined (EXTENDED_GLOB)
  204. ! extern int extended_glob, extglob_flag;
  205. #endif
  206. ***************
  207. *** 5616,5620 ****
  208. /* Reset to global value of extended glob */
  209. if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
  210. ! extended_glob = global_extglob;
  211. #endif
  212. if (parser_state & (PST_CMDSUBST|PST_STRING))
  213. --- 5616,5620 ----
  214. /* Reset to global value of extended glob */
  215. if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
  216. ! extended_glob = extglob_flag;
  217. #endif
  218. if (parser_state & (PST_CMDSUBST|PST_STRING))
  219. ***************
  220. *** 6436,6443 ****
  221. #if defined (EXTENDED_GLOB)
  222. /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
  223. ! conditional command and have already set global_extglob appropriately. */
  224. if (shell_compatibility_level <= 51 && was_extpat == 0)
  225. {
  226. ! local_extglob = global_extglob = extended_glob;
  227. extended_glob = 1;
  228. }
  229. --- 6436,6443 ----
  230. #if defined (EXTENDED_GLOB)
  231. /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
  232. ! conditional command and have already set extended_glob appropriately. */
  233. if (shell_compatibility_level <= 51 && was_extpat == 0)
  234. {
  235. ! local_extglob = extended_glob;
  236. extended_glob = 1;
  237. }
  238. ***************
  239. *** 6547,6551 ****
  240. sh_parser_state_t ps;
  241. sh_input_line_state_t ls;
  242. ! int orig_ind, nc, sflags, start_lineno;
  243. char *ret, *ep, *ostring;
  244. --- 6547,6551 ----
  245. sh_parser_state_t ps;
  246. sh_input_line_state_t ls;
  247. ! int orig_ind, nc, sflags, start_lineno, local_extglob;
  248. char *ret, *ep, *ostring;
  249. ***************
  250. *** 6590,6594 ****
  251. expand_aliases = 0;
  252. #if defined (EXTENDED_GLOB)
  253. ! global_extglob = extended_glob; /* for reset_parser() */
  254. #endif
  255. --- 6590,6594 ----
  256. expand_aliases = 0;
  257. #if defined (EXTENDED_GLOB)
  258. ! local_extglob = extended_glob;
  259. #endif
  260. ***************
  261. *** 6608,6611 ****
  262. --- 6608,6614 ----
  263. restore_parser_state (&ps);
  264. + #if defined (EXTENDED_GLOB)
  265. + extended_glob = local_extglob;
  266. + #endif
  267. token_to_read = 0;
  268. ***************
  269. *** 7043,7052 ****
  270. --- 7046,7059 ----
  271. /* rhs */
  272. + #if defined (EXTENDED_GLOB)
  273. local_extglob = extended_glob;
  274. if (parser_state & PST_EXTPAT)
  275. extended_glob = 1;
  276. + #endif
  277. tok = read_token (READ);
  278. + #if defined (EXTENDED_GLOB)
  279. if (parser_state & PST_EXTPAT)
  280. extended_glob = local_extglob;
  281. + #endif
  282. parser_state &= ~(PST_REGEXP|PST_EXTPAT);
  283. ***************
  284. *** 7095,7099 ****
  285. COND_COM *cexp;
  286. - global_extglob = extended_glob;
  287. cexp = cond_expr ();
  288. return (make_cond_command (cexp));
  289. --- 7102,7105 ----
  290. *** ../bash-5.2/patchlevel.h 2020-06-22 14:51:03.000000000 -0400
  291. --- patchlevel.h 2020-10-01 11:01:28.000000000 -0400
  292. ***************
  293. *** 26,30 ****
  294. looks for to find the patch level (for the sccs version string). */
  295. ! #define PATCHLEVEL 11
  296. #endif /* _PATCHLEVEL_H_ */
  297. --- 26,30 ----
  298. looks for to find the patch level (for the sccs version string). */
  299. ! #define PATCHLEVEL 12
  300. #endif /* _PATCHLEVEL_H_ */