Commit 58c01ca
committed
Store task definitions in a prototype-safe Map
`FederationBuilderImpl.taskDefinitions` was a plain object, so the
duplicate check `name in this.taskDefinitions` and the lookups
`this.taskDefinitions[taskName]` consulted the prototype chain. Task
names are arbitrary user-supplied strings, so a name such as
"constructor", "toString", or "__proto__" was wrongly reported as
already defined and resolved to an inherited method on lookup.
Switch the registry to a `Map`, which is immune to prototype keys by
construction and avoids the clone footgun where a later spread or
`Object.assign` would silently reintroduce the prototype. Sibling
registries stay plain objects since they are keyed by controlled
values (type-id URLs). Add a regression test covering names that
collide with `Object.prototype`.
#803 (comment)
Assisted-by: Claude Code:claude-opus-4-81 parent f7c9a34 commit 58c01ca
3 files changed
Lines changed: 38 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
191 | | - | |
| 191 | + | |
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
204 | | - | |
| 204 | + | |
205 | 205 | | |
206 | 206 | | |
207 | 207 | | |
| |||
267 | 267 | | |
268 | 268 | | |
269 | 269 | | |
270 | | - | |
| 270 | + | |
271 | 271 | | |
272 | 272 | | |
273 | 273 | | |
| |||
607 | 607 | | |
608 | 608 | | |
609 | 609 | | |
610 | | - | |
| 610 | + | |
611 | 611 | | |
612 | 612 | | |
613 | | - | |
| 613 | + | |
614 | 614 | | |
615 | 615 | | |
616 | 616 | | |
617 | 617 | | |
618 | 618 | | |
619 | 619 | | |
620 | 620 | | |
621 | | - | |
| 621 | + | |
622 | 622 | | |
623 | 623 | | |
624 | 624 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
957 | 957 | | |
958 | 958 | | |
959 | 959 | | |
960 | | - | |
| 960 | + | |
961 | 961 | | |
962 | 962 | | |
963 | 963 | | |
| |||
2119 | 2119 | | |
2120 | 2120 | | |
2121 | 2121 | | |
2122 | | - | |
| 2122 | + | |
2123 | 2123 | | |
2124 | 2124 | | |
2125 | 2125 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
169 | 169 | | |
170 | 170 | | |
171 | 171 | | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
172 | 199 | | |
173 | 200 | | |
174 | 201 | | |
| |||
187 | 214 | | |
188 | 215 | | |
189 | 216 | | |
190 | | - | |
191 | | - | |
| 217 | + | |
| 218 | + | |
192 | 219 | | |
193 | 220 | | |
194 | | - | |
| 221 | + | |
195 | 222 | | |
196 | 223 | | |
197 | 224 | | |
| |||
0 commit comments