Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Permit SET-WORD! as the argument to COPY and SET in PARSE (CC #2023) #165

Merged
merged 1 commit into from

2 participants

@hostilefork

Implementation of CC #2023... a seemingly uncontroversial change which allows set-words as arguments to COPY and SET in PARSE. This is beneficial for the locals-gathering constructs like FUNCTION and CLOSURE.

foo: function [] [
    parse "Rebol" [copy name: to end]
]

This allows FUNCTION to find name and make it /LOCAL instead of leaking into the global context.

The old behavior continues to work as before.

@carls carls merged commit c5e0d84 into rebol:master
@zsx zsx referenced this pull request from a commit in zsx/r3
@zsx zsx Do not increase tail before extension
It will confuse Expand_Series expects "tail" to be the actual size, and
cause a read beyond the allocated memory, or heap buffer overflow found
by address sanitizer of GCC:
=================================================================
==10856==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62a00000b201 at pc 0x47df61 bp 0x7fffffff2ca0 sp 0x7fffffff2c98
READ of size 1 at 0x62a00000b201 thread T0
    #0 0x47df60 in Expand_Series ../src/core/m-series.c:145
    #1 0x47e5a7 in Extend_Series ../src/core/m-series.c:187
    #2 0x466e0c in Scan_Quote ../src/core/l-scan.c:462
    #3 0x46a797 in Scan_Token ../src/core/l-scan.c:918
    #4 0x46e263 in Scan_Block ../src/core/l-scan.c:1188
    #5 0x46e722 in Scan_Code ../src/core/l-scan.c:1548
    #6 0x46e886 in Scan_Source ../src/core/l-scan.c:1568
    #7 0x4cb85c in Make_Block_Type ../src/core/t-block.c:306
    #8 0x4cd1b8 in T_Block ../src/core/t-block.c:608
    #9 0x4d042e in T_Datatype ../src/core/t-datatype.c:92
    #10 0x42e080 in Do_Act ../src/core/c-function.c:338
    #11 0x42e7e5 in Do_Action ../src/core/c-function.c:396
    #12 0x413628 in Do_Next ../src/core/c-do.c:884
    #13 0x41309b in Do_Next ../src/core/c-do.c:858
    #14 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #15 0x482dd2 in N_case ../src/core/n-control.c:349
    #16 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #17 0x413628 in Do_Next ../src/core/c-do.c:884
    #18 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #19 0x42e869 in Do_Function ../src/core/c-function.c:415
    #20 0x413628 in Do_Next ../src/core/c-do.c:884
    #21 0x41309b in Do_Next ../src/core/c-do.c:858
    #22 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #23 0x42e869 in Do_Function ../src/core/c-function.c:415
    #24 0x413628 in Do_Next ../src/core/c-do.c:884
    #25 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #26 0x414152 in Do_Next ../src/core/c-do.c:939
    #27 0x48201c in N_all ../src/core/n-control.c:261
    #28 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #29 0x413628 in Do_Next ../src/core/c-do.c:884
    #30 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #31 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #32 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #33 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #34 0x413628 in Do_Next ../src/core/c-do.c:884
    #35 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #36 0x42e869 in Do_Function ../src/core/c-function.c:415
    #37 0x413628 in Do_Next ../src/core/c-do.c:884
    #38 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #39 0x414152 in Do_Next ../src/core/c-do.c:939
    #40 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #41 0x48459c in N_if ../src/core/n-control.c:619
    #42 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #43 0x413628 in Do_Next ../src/core/c-do.c:884
    #44 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #45 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #46 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #47 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #48 0x413628 in Do_Next ../src/core/c-do.c:884
    #49 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #50 0x42e869 in Do_Function ../src/core/c-function.c:415
    #51 0x418fb4 in Apply_Block ../src/core/c-do.c:1474
    #52 0x4824fb in N_apply ../src/core/n-control.c:295
    #53 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #54 0x413628 in Do_Next ../src/core/c-do.c:884
    #55 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #56 0x414152 in Do_Next ../src/core/c-do.c:939
    #57 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #58 0x485388 in N_unless ../src/core/n-control.c:763
    #59 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #60 0x413628 in Do_Next ../src/core/c-do.c:884
    #61 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #62 0x483eff in N_do ../src/core/n-control.c:523
    #63 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #64 0x413628 in Do_Next ../src/core/c-do.c:884
    #65 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #66 0x414152 in Do_Next ../src/core/c-do.c:939
    #67 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #68 0x48459c in N_if ../src/core/n-control.c:619
    #69 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #70 0x413628 in Do_Next ../src/core/c-do.c:884
    #71 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #72 0x48f8cc in Loop_Integer ../src/core/n-loop.c:130
    #73 0x49314d in N_repeat ../src/core/n-loop.c:631
    #74 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #75 0x413628 in Do_Next ../src/core/c-do.c:884
    #76 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #77 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #78 0x413628 in Do_Next ../src/core/c-do.c:884
    #79 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #80 0x485388 in N_unless ../src/core/n-control.c:763
    #81 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #82 0x413628 in Do_Next ../src/core/c-do.c:884
    #83 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #84 0x42e869 in Do_Function ../src/core/c-function.c:415
    #85 0x418fb4 in Apply_Block ../src/core/c-do.c:1474
    #86 0x4824fb in N_apply ../src/core/n-control.c:295
    #87 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #88 0x413628 in Do_Next ../src/core/c-do.c:884
    #89 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #90 0x414152 in Do_Next ../src/core/c-do.c:939
    #91 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #92 0x485388 in N_unless ../src/core/n-control.c:763
    #93 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #94 0x413628 in Do_Next ../src/core/c-do.c:884
    #95 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #96 0x483eff in N_do ../src/core/n-control.c:523
    #97 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #98 0x413628 in Do_Next ../src/core/c-do.c:884
    #99 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #100 0x414152 in Do_Next ../src/core/c-do.c:939
    #101 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #102 0x48459c in N_if ../src/core/n-control.c:619
    #103 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #104 0x413628 in Do_Next ../src/core/c-do.c:884
    #105 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #106 0x48f8cc in Loop_Integer ../src/core/n-loop.c:130
    #107 0x49314d in N_repeat ../src/core/n-loop.c:631
    #108 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #109 0x413628 in Do_Next ../src/core/c-do.c:884
    #110 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #111 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #112 0x413628 in Do_Next ../src/core/c-do.c:884
    #113 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #114 0x485388 in N_unless ../src/core/n-control.c:763
    #115 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #116 0x413628 in Do_Next ../src/core/c-do.c:884
    #117 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #118 0x42e869 in Do_Function ../src/core/c-function.c:415
    #119 0x413628 in Do_Next ../src/core/c-do.c:884
    #120 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #121 0x484cf1 in N_switch ../src/core/n-control.c:716
    #122 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #123 0x413628 in Do_Next ../src/core/c-do.c:884
    #124 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #125 0x42e869 in Do_Function ../src/core/c-function.c:415
    #126 0x413628 in Do_Next ../src/core/c-do.c:884
    #127 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #128 0x48459c in N_if ../src/core/n-control.c:619
    #129 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #130 0x413628 in Do_Next ../src/core/c-do.c:884
    #131 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #132 0x42e869 in Do_Function ../src/core/c-function.c:415
    #133 0x413628 in Do_Next ../src/core/c-do.c:884
    #134 0x41309b in Do_Next ../src/core/c-do.c:858
    #135 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #136 0x484280 in N_either ../src/core/n-control.c:595
    #137 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #138 0x413628 in Do_Next ../src/core/c-do.c:884
    #139 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #140 0x42e869 in Do_Function ../src/core/c-function.c:415
    #141 0x419631 in Apply_Function ../src/core/c-do.c:1518
    #142 0x419918 in Apply_Func ../src/core/c-do.c:1545
    #143 0x48d102 in N_wake_up ../src/core/n-io.c:415
    #144 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #145 0x413628 in Do_Next ../src/core/c-do.c:884
    #146 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #147 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #148 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #149 0x492b66 in N_loop ../src/core/n-loop.c:590
    #150 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #151 0x413628 in Do_Next ../src/core/c-do.c:884
    #152 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #153 0x42e869 in Do_Function ../src/core/c-function.c:415
    #154 0x419631 in Apply_Function ../src/core/c-do.c:1518
    #155 0x419918 in Apply_Func ../src/core/c-do.c:1545
    #156 0x42fef7 in Awake_System ../src/core/c-port.c:198
    #157 0x43012a in Wait_Ports ../src/core/c-port.c:231
    #158 0x48cd62 in N_wait ../src/core/n-io.c:374
    #159 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #160 0x413628 in Do_Next ../src/core/c-do.c:884
    #161 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #162 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #163 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #164 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #165 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #166 0x4929a7 in N_forever ../src/core/n-loop.c:527
    #167 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #168 0x413628 in Do_Next ../src/core/c-do.c:884
    #169 0x4152ff in Try_Block ../src/core/c-do.c:1077
    #170 0x48507e in N_try ../src/core/n-control.c:740
    #171 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #172 0x413628 in Do_Next ../src/core/c-do.c:884
    #173 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #174 0x414152 in Do_Next ../src/core/c-do.c:939
    #175 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #176 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #177 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #178 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #179 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #180 0x42e869 in Do_Function ../src/core/c-function.c:415
    #181 0x413628 in Do_Next ../src/core/c-do.c:884
    #182 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #183 0x48459c in N_if ../src/core/n-control.c:619
    #184 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #185 0x413628 in Do_Next ../src/core/c-do.c:884
    #186 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #187 0x42e869 in Do_Function ../src/core/c-function.c:415
    #188 0x413628 in Do_Next ../src/core/c-do.c:884
    #189 0x41309b in Do_Next ../src/core/c-do.c:858
    #190 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #191 0x42e869 in Do_Function ../src/core/c-function.c:415
    #192 0x413628 in Do_Next ../src/core/c-do.c:884
    #193 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #194 0x42e869 in Do_Function ../src/core/c-function.c:415
    #195 0x413628 in Do_Next ../src/core/c-do.c:884
    #196 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #197 0x414152 in Do_Next ../src/core/c-do.c:939
    #198 0x48201c in N_all ../src/core/n-control.c:261
    #199 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #200 0x413628 in Do_Next ../src/core/c-do.c:884
    #201 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #202 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #203 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #204 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #205 0x413628 in Do_Next ../src/core/c-do.c:884
    #206 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #207 0x42e869 in Do_Function ../src/core/c-function.c:415
    #208 0x413628 in Do_Next ../src/core/c-do.c:884
    #209 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #210 0x485388 in N_unless ../src/core/n-control.c:763
    #211 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #212 0x413628 in Do_Next ../src/core/c-do.c:884
    #213 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #214 0x42e869 in Do_Function ../src/core/c-function.c:415
    #215 0x413628 in Do_Next ../src/core/c-do.c:884
    #216 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #217 0x48459c in N_if ../src/core/n-control.c:619
    #218 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #219 0x413628 in Do_Next ../src/core/c-do.c:884
    #220 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #221 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #222 0x413628 in Do_Next ../src/core/c-do.c:884
    #223 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #224 0x414152 in Do_Next ../src/core/c-do.c:939
    #225 0x48201c in N_all ../src/core/n-control.c:261
    #226 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #227 0x413628 in Do_Next ../src/core/c-do.c:884
    #228 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #229 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #230 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #231 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #232 0x413628 in Do_Next ../src/core/c-do.c:884
    #233 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #234 0x42e869 in Do_Function ../src/core/c-function.c:415
    #235 0x413628 in Do_Next ../src/core/c-do.c:884
    #236 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #237 0x48459c in N_if ../src/core/n-control.c:619
    #238 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #239 0x413628 in Do_Next ../src/core/c-do.c:884
    #240 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #241 0x42e869 in Do_Function ../src/core/c-function.c:415
    #242 0x413628 in Do_Next ../src/core/c-do.c:884
    #243 0x41309b in Do_Next ../src/core/c-do.c:858
    #244 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #245 0x42e869 in Do_Function ../src/core/c-function.c:415
    #246 0x413628 in Do_Next ../src/core/c-do.c:884
    #247 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #248 0x48459c in N_if ../src/core/n-control.c:619
    #249 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #250 0x413628 in Do_Next ../src/core/c-do.c:884
    #251 0x414825 in Do_Blk ../src/core/c-do.c:1010

0x62a00000b201 is located 1 bytes to the right of 20480-byte region [0x62a000006200,0x62a00000b200)
allocated by thread T0 here:
    #0 0x7ffff6f58b1f in malloc (/usr/lib/libasan.so.1+0x54b1f)
    #1 0x47924a in Make_Mem ../src/core/m-pools.c:121
    #2 0x47a9ff in Make_Series ../src/core/m-pools.c:406
    #3 0x4aee84 in Make_Unicode ../src/core/s-make.c:59
    #4 0x4bb797 in Init_Mold ../src/core/s-mold.c:1425
    #5 0x40da64 in Init_Core ../src/core/b-init.c:940
    #6 0x4055e0 in RL_Init ../src/core/a-lib.c:124
    #7 0x580aa2 in main ../src/os/host-main.c:154
    #8 0x7ffff5719fff in __libc_start_main (/usr/lib/libc.so.6+0x1ffff)

SUMMARY: AddressSanitizer: heap-buffer-overflow ../src/core/m-series.c:145 Expand_Series
Shadow bytes around the buggy address:
  0x0c547fff95f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9630: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c547fff9640:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9650: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9660: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9670: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9690: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Contiguous container OOB:fc
  ASan internal:
3d7484c
@zsx zsx referenced this pull request from a commit in metaeducation/ren-c
@zsx zsx Do not increase tail before extension
It will confuse Expand_Series expects "tail" to be the actual size, and
cause a read beyond the allocated memory, or heap buffer overflow found
by address sanitizer of GCC:
=================================================================
==10856==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62a00000b201 at pc 0x47df61 bp 0x7fffffff2ca0 sp 0x7fffffff2c98
READ of size 1 at 0x62a00000b201 thread T0
    #0 0x47df60 in Expand_Series ../src/core/m-series.c:145
    #1 0x47e5a7 in Extend_Series ../src/core/m-series.c:187
    #2 0x466e0c in Scan_Quote ../src/core/l-scan.c:462
    #3 0x46a797 in Scan_Token ../src/core/l-scan.c:918
    #4 0x46e263 in Scan_Block ../src/core/l-scan.c:1188
    #5 0x46e722 in Scan_Code ../src/core/l-scan.c:1548
    #6 0x46e886 in Scan_Source ../src/core/l-scan.c:1568
    #7 0x4cb85c in Make_Block_Type ../src/core/t-block.c:306
    #8 0x4cd1b8 in T_Block ../src/core/t-block.c:608
    #9 0x4d042e in T_Datatype ../src/core/t-datatype.c:92
    #10 0x42e080 in Do_Act ../src/core/c-function.c:338
    #11 0x42e7e5 in Do_Action ../src/core/c-function.c:396
    #12 0x413628 in Do_Next ../src/core/c-do.c:884
    #13 0x41309b in Do_Next ../src/core/c-do.c:858
    #14 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #15 0x482dd2 in N_case ../src/core/n-control.c:349
    #16 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #17 0x413628 in Do_Next ../src/core/c-do.c:884
    #18 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #19 0x42e869 in Do_Function ../src/core/c-function.c:415
    #20 0x413628 in Do_Next ../src/core/c-do.c:884
    #21 0x41309b in Do_Next ../src/core/c-do.c:858
    #22 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #23 0x42e869 in Do_Function ../src/core/c-function.c:415
    #24 0x413628 in Do_Next ../src/core/c-do.c:884
    #25 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #26 0x414152 in Do_Next ../src/core/c-do.c:939
    #27 0x48201c in N_all ../src/core/n-control.c:261
    #28 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #29 0x413628 in Do_Next ../src/core/c-do.c:884
    #30 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #31 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #32 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #33 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #34 0x413628 in Do_Next ../src/core/c-do.c:884
    #35 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #36 0x42e869 in Do_Function ../src/core/c-function.c:415
    #37 0x413628 in Do_Next ../src/core/c-do.c:884
    #38 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #39 0x414152 in Do_Next ../src/core/c-do.c:939
    #40 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #41 0x48459c in N_if ../src/core/n-control.c:619
    #42 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #43 0x413628 in Do_Next ../src/core/c-do.c:884
    #44 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #45 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #46 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #47 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #48 0x413628 in Do_Next ../src/core/c-do.c:884
    #49 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #50 0x42e869 in Do_Function ../src/core/c-function.c:415
    #51 0x418fb4 in Apply_Block ../src/core/c-do.c:1474
    #52 0x4824fb in N_apply ../src/core/n-control.c:295
    #53 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #54 0x413628 in Do_Next ../src/core/c-do.c:884
    #55 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #56 0x414152 in Do_Next ../src/core/c-do.c:939
    #57 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #58 0x485388 in N_unless ../src/core/n-control.c:763
    #59 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #60 0x413628 in Do_Next ../src/core/c-do.c:884
    #61 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #62 0x483eff in N_do ../src/core/n-control.c:523
    #63 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #64 0x413628 in Do_Next ../src/core/c-do.c:884
    #65 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #66 0x414152 in Do_Next ../src/core/c-do.c:939
    #67 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #68 0x48459c in N_if ../src/core/n-control.c:619
    #69 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #70 0x413628 in Do_Next ../src/core/c-do.c:884
    #71 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #72 0x48f8cc in Loop_Integer ../src/core/n-loop.c:130
    #73 0x49314d in N_repeat ../src/core/n-loop.c:631
    #74 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #75 0x413628 in Do_Next ../src/core/c-do.c:884
    #76 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #77 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #78 0x413628 in Do_Next ../src/core/c-do.c:884
    #79 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #80 0x485388 in N_unless ../src/core/n-control.c:763
    #81 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #82 0x413628 in Do_Next ../src/core/c-do.c:884
    #83 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #84 0x42e869 in Do_Function ../src/core/c-function.c:415
    #85 0x418fb4 in Apply_Block ../src/core/c-do.c:1474
    #86 0x4824fb in N_apply ../src/core/n-control.c:295
    #87 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #88 0x413628 in Do_Next ../src/core/c-do.c:884
    #89 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #90 0x414152 in Do_Next ../src/core/c-do.c:939
    #91 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #92 0x485388 in N_unless ../src/core/n-control.c:763
    #93 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #94 0x413628 in Do_Next ../src/core/c-do.c:884
    #95 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #96 0x483eff in N_do ../src/core/n-control.c:523
    #97 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #98 0x413628 in Do_Next ../src/core/c-do.c:884
    #99 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #100 0x414152 in Do_Next ../src/core/c-do.c:939
    #101 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #102 0x48459c in N_if ../src/core/n-control.c:619
    #103 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #104 0x413628 in Do_Next ../src/core/c-do.c:884
    #105 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #106 0x48f8cc in Loop_Integer ../src/core/n-loop.c:130
    #107 0x49314d in N_repeat ../src/core/n-loop.c:631
    #108 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #109 0x413628 in Do_Next ../src/core/c-do.c:884
    #110 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #111 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #112 0x413628 in Do_Next ../src/core/c-do.c:884
    #113 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #114 0x485388 in N_unless ../src/core/n-control.c:763
    #115 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #116 0x413628 in Do_Next ../src/core/c-do.c:884
    #117 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #118 0x42e869 in Do_Function ../src/core/c-function.c:415
    #119 0x413628 in Do_Next ../src/core/c-do.c:884
    #120 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #121 0x484cf1 in N_switch ../src/core/n-control.c:716
    #122 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #123 0x413628 in Do_Next ../src/core/c-do.c:884
    #124 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #125 0x42e869 in Do_Function ../src/core/c-function.c:415
    #126 0x413628 in Do_Next ../src/core/c-do.c:884
    #127 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #128 0x48459c in N_if ../src/core/n-control.c:619
    #129 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #130 0x413628 in Do_Next ../src/core/c-do.c:884
    #131 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #132 0x42e869 in Do_Function ../src/core/c-function.c:415
    #133 0x413628 in Do_Next ../src/core/c-do.c:884
    #134 0x41309b in Do_Next ../src/core/c-do.c:858
    #135 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #136 0x484280 in N_either ../src/core/n-control.c:595
    #137 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #138 0x413628 in Do_Next ../src/core/c-do.c:884
    #139 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #140 0x42e869 in Do_Function ../src/core/c-function.c:415
    #141 0x419631 in Apply_Function ../src/core/c-do.c:1518
    #142 0x419918 in Apply_Func ../src/core/c-do.c:1545
    #143 0x48d102 in N_wake_up ../src/core/n-io.c:415
    #144 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #145 0x413628 in Do_Next ../src/core/c-do.c:884
    #146 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #147 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #148 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #149 0x492b66 in N_loop ../src/core/n-loop.c:590
    #150 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #151 0x413628 in Do_Next ../src/core/c-do.c:884
    #152 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #153 0x42e869 in Do_Function ../src/core/c-function.c:415
    #154 0x419631 in Apply_Function ../src/core/c-do.c:1518
    #155 0x419918 in Apply_Func ../src/core/c-do.c:1545
    #156 0x42fef7 in Awake_System ../src/core/c-port.c:198
    #157 0x43012a in Wait_Ports ../src/core/c-port.c:231
    #158 0x48cd62 in N_wait ../src/core/n-io.c:374
    #159 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #160 0x413628 in Do_Next ../src/core/c-do.c:884
    #161 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #162 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #163 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #164 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #165 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #166 0x4929a7 in N_forever ../src/core/n-loop.c:527
    #167 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #168 0x413628 in Do_Next ../src/core/c-do.c:884
    #169 0x4152ff in Try_Block ../src/core/c-do.c:1077
    #170 0x48507e in N_try ../src/core/n-control.c:740
    #171 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #172 0x413628 in Do_Next ../src/core/c-do.c:884
    #173 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #174 0x414152 in Do_Next ../src/core/c-do.c:939
    #175 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #176 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #177 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #178 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #179 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #180 0x42e869 in Do_Function ../src/core/c-function.c:415
    #181 0x413628 in Do_Next ../src/core/c-do.c:884
    #182 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #183 0x48459c in N_if ../src/core/n-control.c:619
    #184 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #185 0x413628 in Do_Next ../src/core/c-do.c:884
    #186 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #187 0x42e869 in Do_Function ../src/core/c-function.c:415
    #188 0x413628 in Do_Next ../src/core/c-do.c:884
    #189 0x41309b in Do_Next ../src/core/c-do.c:858
    #190 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #191 0x42e869 in Do_Function ../src/core/c-function.c:415
    #192 0x413628 in Do_Next ../src/core/c-do.c:884
    #193 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #194 0x42e869 in Do_Function ../src/core/c-function.c:415
    #195 0x413628 in Do_Next ../src/core/c-do.c:884
    #196 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #197 0x414152 in Do_Next ../src/core/c-do.c:939
    #198 0x48201c in N_all ../src/core/n-control.c:261
    #199 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #200 0x413628 in Do_Next ../src/core/c-do.c:884
    #201 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #202 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #203 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #204 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #205 0x413628 in Do_Next ../src/core/c-do.c:884
    #206 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #207 0x42e869 in Do_Function ../src/core/c-function.c:415
    #208 0x413628 in Do_Next ../src/core/c-do.c:884
    #209 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #210 0x485388 in N_unless ../src/core/n-control.c:763
    #211 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #212 0x413628 in Do_Next ../src/core/c-do.c:884
    #213 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #214 0x42e869 in Do_Function ../src/core/c-function.c:415
    #215 0x413628 in Do_Next ../src/core/c-do.c:884
    #216 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #217 0x48459c in N_if ../src/core/n-control.c:619
    #218 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #219 0x413628 in Do_Next ../src/core/c-do.c:884
    #220 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #221 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #222 0x413628 in Do_Next ../src/core/c-do.c:884
    #223 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #224 0x414152 in Do_Next ../src/core/c-do.c:939
    #225 0x48201c in N_all ../src/core/n-control.c:261
    #226 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #227 0x413628 in Do_Next ../src/core/c-do.c:884
    #228 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #229 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #230 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #231 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #232 0x413628 in Do_Next ../src/core/c-do.c:884
    #233 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #234 0x42e869 in Do_Function ../src/core/c-function.c:415
    #235 0x413628 in Do_Next ../src/core/c-do.c:884
    #236 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #237 0x48459c in N_if ../src/core/n-control.c:619
    #238 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #239 0x413628 in Do_Next ../src/core/c-do.c:884
    #240 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #241 0x42e869 in Do_Function ../src/core/c-function.c:415
    #242 0x413628 in Do_Next ../src/core/c-do.c:884
    #243 0x41309b in Do_Next ../src/core/c-do.c:858
    #244 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #245 0x42e869 in Do_Function ../src/core/c-function.c:415
    #246 0x413628 in Do_Next ../src/core/c-do.c:884
    #247 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #248 0x48459c in N_if ../src/core/n-control.c:619
    #249 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #250 0x413628 in Do_Next ../src/core/c-do.c:884
    #251 0x414825 in Do_Blk ../src/core/c-do.c:1010

0x62a00000b201 is located 1 bytes to the right of 20480-byte region [0x62a000006200,0x62a00000b200)
allocated by thread T0 here:
    #0 0x7ffff6f58b1f in malloc (/usr/lib/libasan.so.1+0x54b1f)
    #1 0x47924a in Make_Mem ../src/core/m-pools.c:121
    #2 0x47a9ff in Make_Series ../src/core/m-pools.c:406
    #3 0x4aee84 in Make_Unicode ../src/core/s-make.c:59
    #4 0x4bb797 in Init_Mold ../src/core/s-mold.c:1425
    #5 0x40da64 in Init_Core ../src/core/b-init.c:940
    #6 0x4055e0 in RL_Init ../src/core/a-lib.c:124
    #7 0x580aa2 in main ../src/os/host-main.c:154
    #8 0x7ffff5719fff in __libc_start_main (/usr/lib/libc.so.6+0x1ffff)

SUMMARY: AddressSanitizer: heap-buffer-overflow ../src/core/m-series.c:145 Expand_Series
Shadow bytes around the buggy address:
  0x0c547fff95f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9630: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c547fff9640:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9650: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9660: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9670: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9690: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Contiguous container OOB:fc
  ASan internal:
a54820d
@zsx zsx referenced this pull request from a commit in metaeducation/ren-c
@zsx zsx Do not increase tail before extension
It will confuse Expand_Series expects "tail" to be the actual size, and
cause a read beyond the allocated memory, or heap buffer overflow found
by address sanitizer of GCC:
=================================================================
==10856==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62a00000b201 at pc 0x47df61 bp 0x7fffffff2ca0 sp 0x7fffffff2c98
READ of size 1 at 0x62a00000b201 thread T0
    #0 0x47df60 in Expand_Series ../src/core/m-series.c:145
    #1 0x47e5a7 in Extend_Series ../src/core/m-series.c:187
    #2 0x466e0c in Scan_Quote ../src/core/l-scan.c:462
    #3 0x46a797 in Scan_Token ../src/core/l-scan.c:918
    #4 0x46e263 in Scan_Block ../src/core/l-scan.c:1188
    #5 0x46e722 in Scan_Code ../src/core/l-scan.c:1548
    #6 0x46e886 in Scan_Source ../src/core/l-scan.c:1568
    #7 0x4cb85c in Make_Block_Type ../src/core/t-block.c:306
    #8 0x4cd1b8 in T_Block ../src/core/t-block.c:608
    #9 0x4d042e in T_Datatype ../src/core/t-datatype.c:92
    #10 0x42e080 in Do_Act ../src/core/c-function.c:338
    #11 0x42e7e5 in Do_Action ../src/core/c-function.c:396
    #12 0x413628 in Do_Next ../src/core/c-do.c:884
    #13 0x41309b in Do_Next ../src/core/c-do.c:858
    #14 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #15 0x482dd2 in N_case ../src/core/n-control.c:349
    #16 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #17 0x413628 in Do_Next ../src/core/c-do.c:884
    #18 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #19 0x42e869 in Do_Function ../src/core/c-function.c:415
    #20 0x413628 in Do_Next ../src/core/c-do.c:884
    #21 0x41309b in Do_Next ../src/core/c-do.c:858
    #22 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #23 0x42e869 in Do_Function ../src/core/c-function.c:415
    #24 0x413628 in Do_Next ../src/core/c-do.c:884
    #25 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #26 0x414152 in Do_Next ../src/core/c-do.c:939
    #27 0x48201c in N_all ../src/core/n-control.c:261
    #28 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #29 0x413628 in Do_Next ../src/core/c-do.c:884
    #30 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #31 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #32 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #33 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #34 0x413628 in Do_Next ../src/core/c-do.c:884
    #35 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #36 0x42e869 in Do_Function ../src/core/c-function.c:415
    #37 0x413628 in Do_Next ../src/core/c-do.c:884
    #38 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #39 0x414152 in Do_Next ../src/core/c-do.c:939
    #40 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #41 0x48459c in N_if ../src/core/n-control.c:619
    #42 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #43 0x413628 in Do_Next ../src/core/c-do.c:884
    #44 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #45 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #46 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #47 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #48 0x413628 in Do_Next ../src/core/c-do.c:884
    #49 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #50 0x42e869 in Do_Function ../src/core/c-function.c:415
    #51 0x418fb4 in Apply_Block ../src/core/c-do.c:1474
    #52 0x4824fb in N_apply ../src/core/n-control.c:295
    #53 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #54 0x413628 in Do_Next ../src/core/c-do.c:884
    #55 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #56 0x414152 in Do_Next ../src/core/c-do.c:939
    #57 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #58 0x485388 in N_unless ../src/core/n-control.c:763
    #59 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #60 0x413628 in Do_Next ../src/core/c-do.c:884
    #61 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #62 0x483eff in N_do ../src/core/n-control.c:523
    #63 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #64 0x413628 in Do_Next ../src/core/c-do.c:884
    #65 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #66 0x414152 in Do_Next ../src/core/c-do.c:939
    #67 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #68 0x48459c in N_if ../src/core/n-control.c:619
    #69 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #70 0x413628 in Do_Next ../src/core/c-do.c:884
    #71 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #72 0x48f8cc in Loop_Integer ../src/core/n-loop.c:130
    #73 0x49314d in N_repeat ../src/core/n-loop.c:631
    #74 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #75 0x413628 in Do_Next ../src/core/c-do.c:884
    #76 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #77 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #78 0x413628 in Do_Next ../src/core/c-do.c:884
    #79 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #80 0x485388 in N_unless ../src/core/n-control.c:763
    #81 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #82 0x413628 in Do_Next ../src/core/c-do.c:884
    #83 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #84 0x42e869 in Do_Function ../src/core/c-function.c:415
    #85 0x418fb4 in Apply_Block ../src/core/c-do.c:1474
    #86 0x4824fb in N_apply ../src/core/n-control.c:295
    #87 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #88 0x413628 in Do_Next ../src/core/c-do.c:884
    #89 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #90 0x414152 in Do_Next ../src/core/c-do.c:939
    #91 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #92 0x485388 in N_unless ../src/core/n-control.c:763
    #93 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #94 0x413628 in Do_Next ../src/core/c-do.c:884
    #95 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #96 0x483eff in N_do ../src/core/n-control.c:523
    #97 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #98 0x413628 in Do_Next ../src/core/c-do.c:884
    #99 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #100 0x414152 in Do_Next ../src/core/c-do.c:939
    #101 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #102 0x48459c in N_if ../src/core/n-control.c:619
    #103 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #104 0x413628 in Do_Next ../src/core/c-do.c:884
    #105 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #106 0x48f8cc in Loop_Integer ../src/core/n-loop.c:130
    #107 0x49314d in N_repeat ../src/core/n-loop.c:631
    #108 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #109 0x413628 in Do_Next ../src/core/c-do.c:884
    #110 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #111 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #112 0x413628 in Do_Next ../src/core/c-do.c:884
    #113 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #114 0x485388 in N_unless ../src/core/n-control.c:763
    #115 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #116 0x413628 in Do_Next ../src/core/c-do.c:884
    #117 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #118 0x42e869 in Do_Function ../src/core/c-function.c:415
    #119 0x413628 in Do_Next ../src/core/c-do.c:884
    #120 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #121 0x484cf1 in N_switch ../src/core/n-control.c:716
    #122 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #123 0x413628 in Do_Next ../src/core/c-do.c:884
    #124 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #125 0x42e869 in Do_Function ../src/core/c-function.c:415
    #126 0x413628 in Do_Next ../src/core/c-do.c:884
    #127 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #128 0x48459c in N_if ../src/core/n-control.c:619
    #129 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #130 0x413628 in Do_Next ../src/core/c-do.c:884
    #131 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #132 0x42e869 in Do_Function ../src/core/c-function.c:415
    #133 0x413628 in Do_Next ../src/core/c-do.c:884
    #134 0x41309b in Do_Next ../src/core/c-do.c:858
    #135 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #136 0x484280 in N_either ../src/core/n-control.c:595
    #137 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #138 0x413628 in Do_Next ../src/core/c-do.c:884
    #139 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #140 0x42e869 in Do_Function ../src/core/c-function.c:415
    #141 0x419631 in Apply_Function ../src/core/c-do.c:1518
    #142 0x419918 in Apply_Func ../src/core/c-do.c:1545
    #143 0x48d102 in N_wake_up ../src/core/n-io.c:415
    #144 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #145 0x413628 in Do_Next ../src/core/c-do.c:884
    #146 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #147 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #148 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #149 0x492b66 in N_loop ../src/core/n-loop.c:590
    #150 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #151 0x413628 in Do_Next ../src/core/c-do.c:884
    #152 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #153 0x42e869 in Do_Function ../src/core/c-function.c:415
    #154 0x419631 in Apply_Function ../src/core/c-do.c:1518
    #155 0x419918 in Apply_Func ../src/core/c-do.c:1545
    #156 0x42fef7 in Awake_System ../src/core/c-port.c:198
    #157 0x43012a in Wait_Ports ../src/core/c-port.c:231
    #158 0x48cd62 in N_wait ../src/core/n-io.c:374
    #159 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #160 0x413628 in Do_Next ../src/core/c-do.c:884
    #161 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #162 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #163 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #164 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #165 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #166 0x4929a7 in N_forever ../src/core/n-loop.c:527
    #167 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #168 0x413628 in Do_Next ../src/core/c-do.c:884
    #169 0x4152ff in Try_Block ../src/core/c-do.c:1077
    #170 0x48507e in N_try ../src/core/n-control.c:740
    #171 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #172 0x413628 in Do_Next ../src/core/c-do.c:884
    #173 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #174 0x414152 in Do_Next ../src/core/c-do.c:939
    #175 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #176 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #177 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #178 0x4133c9 in Do_Next ../src/core/c-do.c:877
    #179 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #180 0x42e869 in Do_Function ../src/core/c-function.c:415
    #181 0x413628 in Do_Next ../src/core/c-do.c:884
    #182 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #183 0x48459c in N_if ../src/core/n-control.c:619
    #184 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #185 0x413628 in Do_Next ../src/core/c-do.c:884
    #186 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #187 0x42e869 in Do_Function ../src/core/c-function.c:415
    #188 0x413628 in Do_Next ../src/core/c-do.c:884
    #189 0x41309b in Do_Next ../src/core/c-do.c:858
    #190 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #191 0x42e869 in Do_Function ../src/core/c-function.c:415
    #192 0x413628 in Do_Next ../src/core/c-do.c:884
    #193 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #194 0x42e869 in Do_Function ../src/core/c-function.c:415
    #195 0x413628 in Do_Next ../src/core/c-do.c:884
    #196 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #197 0x414152 in Do_Next ../src/core/c-do.c:939
    #198 0x48201c in N_all ../src/core/n-control.c:261
    #199 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #200 0x413628 in Do_Next ../src/core/c-do.c:884
    #201 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #202 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #203 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #204 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #205 0x413628 in Do_Next ../src/core/c-do.c:884
    #206 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #207 0x42e869 in Do_Function ../src/core/c-function.c:415
    #208 0x413628 in Do_Next ../src/core/c-do.c:884
    #209 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #210 0x485388 in N_unless ../src/core/n-control.c:763
    #211 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #212 0x413628 in Do_Next ../src/core/c-do.c:884
    #213 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #214 0x42e869 in Do_Function ../src/core/c-function.c:415
    #215 0x413628 in Do_Next ../src/core/c-do.c:884
    #216 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #217 0x48459c in N_if ../src/core/n-control.c:619
    #218 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #219 0x413628 in Do_Next ../src/core/c-do.c:884
    #220 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #221 0x42ee10 in Do_Closure ../src/core/c-function.c:459
    #222 0x413628 in Do_Next ../src/core/c-do.c:884
    #223 0x4115f2 in Do_Args ../src/core/c-do.c:669
    #224 0x414152 in Do_Next ../src/core/c-do.c:939
    #225 0x48201c in N_all ../src/core/n-control.c:261
    #226 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #227 0x413628 in Do_Next ../src/core/c-do.c:884
    #228 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #229 0x491abc in Loop_Each ../src/core/n-loop.c:410
    #230 0x492a6c in N_foreach ../src/core/n-loop.c:546
    #231 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #232 0x413628 in Do_Next ../src/core/c-do.c:884
    #233 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #234 0x42e869 in Do_Function ../src/core/c-function.c:415
    #235 0x413628 in Do_Next ../src/core/c-do.c:884
    #236 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #237 0x48459c in N_if ../src/core/n-control.c:619
    #238 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #239 0x413628 in Do_Next ../src/core/c-do.c:884
    #240 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #241 0x42e869 in Do_Function ../src/core/c-function.c:415
    #242 0x413628 in Do_Next ../src/core/c-do.c:884
    #243 0x41309b in Do_Next ../src/core/c-do.c:858
    #244 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #245 0x42e869 in Do_Function ../src/core/c-function.c:415
    #246 0x413628 in Do_Next ../src/core/c-do.c:884
    #247 0x414825 in Do_Blk ../src/core/c-do.c:1010
    #248 0x48459c in N_if ../src/core/n-control.c:619
    #249 0x42dbb7 in Do_Native ../src/core/c-function.c:289
    #250 0x413628 in Do_Next ../src/core/c-do.c:884
    #251 0x414825 in Do_Blk ../src/core/c-do.c:1010

0x62a00000b201 is located 1 bytes to the right of 20480-byte region [0x62a000006200,0x62a00000b200)
allocated by thread T0 here:
    #0 0x7ffff6f58b1f in malloc (/usr/lib/libasan.so.1+0x54b1f)
    #1 0x47924a in Make_Mem ../src/core/m-pools.c:121
    #2 0x47a9ff in Make_Series ../src/core/m-pools.c:406
    #3 0x4aee84 in Make_Unicode ../src/core/s-make.c:59
    #4 0x4bb797 in Init_Mold ../src/core/s-mold.c:1425
    #5 0x40da64 in Init_Core ../src/core/b-init.c:940
    #6 0x4055e0 in RL_Init ../src/core/a-lib.c:124
    #7 0x580aa2 in main ../src/os/host-main.c:154
    #8 0x7ffff5719fff in __libc_start_main (/usr/lib/libc.so.6+0x1ffff)

SUMMARY: AddressSanitizer: heap-buffer-overflow ../src/core/m-series.c:145 Expand_Series
Shadow bytes around the buggy address:
  0x0c547fff95f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c547fff9630: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c547fff9640:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9650: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9660: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9670: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c547fff9690: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Contiguous container OOB:fc
  ASan internal:
84c101d
@hostilefork hostilefork deleted the hostilefork:cc-wish-2023 branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 10 additions and 7 deletions.
  1. +10 −7 src/core/u-parse.c
View
17 src/core/u-parse.c
@@ -46,7 +46,7 @@ typedef struct reb_parse {
} REBPARSE;
enum parse_flags {
- PF_SET,
+ PF_SET_OR_COPY, // test PF_COPY first; if false, this means PF_SET
PF_COPY,
PF_NOT,
PF_NOT2,
@@ -707,9 +707,9 @@ void Print_Parse_Index(REBCNT type, REBVAL *rules, REBSER *series, REBCNT index)
case SYM_COPY:
SET_FLAG(flags, PF_COPY);
case SYM_SET:
- SET_FLAG(flags, PF_SET);
+ SET_FLAG(flags, PF_SET_OR_COPY);
item = rules++;
- if (!IS_WORD(item)) Trap1(RE_PARSE_VARIABLE, item);
+ if (!(IS_WORD(item) || IS_SET_WORD(item))) Trap1(RE_PARSE_VARIABLE, item);
if (VAL_CMD(item)) Trap1(RE_PARSE_COMMAND, item);
word = item;
continue;
@@ -788,9 +788,12 @@ void Print_Parse_Index(REBCNT type, REBVAL *rules, REBSER *series, REBCNT index)
// Any other cmd must be a match command, so proceed...
} else { // It's not a PARSE command, get or set it:
-
- // word: - set a variable to the series at current index
- if (IS_SET_WORD(item)) {
+
+ // word: - if not the target of a COPY or SET operation, this will
+ // default to setting a variable to the series at current index
+ if (IS_SET_WORD(item) &&
+ !GET_FLAG(flags, PF_SET_OR_COPY) || GET_FLAG(flags, PF_COPY))
+ {
Set_Var_Series(item, parse->type, series, index);
continue;
}
@@ -991,7 +994,7 @@ void Print_Parse_Index(REBCNT type, REBVAL *rules, REBSER *series, REBCNT index)
: Copy_String(series, begin, count); // condenses
Set_Var_Series(word, parse->type, ser, 0);
}
- else if (GET_FLAG(flags, PF_SET)) {
+ else if (GET_FLAG(flags, PF_SET_OR_COPY)) {
if (IS_BLOCK_INPUT(parse)) {
item = Get_Var_Safe(word);
if (count == 0) SET_NONE(item);
Something went wrong with that request. Please try again.