Commit dc23a8f
Copy ArrayBuffer arguments when an ObjC TurboModule method takes a block (#57983)
Summary:
A JS-heap `ArrayBuffer` argument was aliased, not copied, whenever the method's return
kind let the call complete synchronously. That is unsafe if the method also takes a
block: the module can hand the buffer to the callback, and JS drains it after the call
has returned, by which point the bytes may be gone. The copy decision now also looks at
the ObjC method signature, and copies whenever a parameter is a block.
Also migrates the macOS sample TurboModule to `RCTArrayBuffer`; it still used
`NSData`/`NSMutableData`, which no longer matches the generated spec.
Changelog:
[iOS][Fixed] - Copy ArrayBuffer arguments in ObjC TurboModules when the method also takes a callback
Differential Revision: D1157674391 parent 4338af0 commit dc23a8f
3 files changed
Lines changed: 101 additions & 4 deletions
File tree
- packages
- react-native
- ReactCommon/react/nativemodule/core/platform/ios/ReactCommon
- React/Base
- rn-tester/RNTesterUnitTests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
21 | 25 | | |
22 | 26 | | |
23 | 27 | | |
| |||
Lines changed: 26 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
210 | 210 | | |
211 | 211 | | |
212 | 212 | | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
213 | 230 | | |
214 | 231 | | |
215 | 232 | | |
216 | | - | |
217 | | - | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
218 | 236 | | |
219 | 237 | | |
220 | 238 | | |
| |||
813 | 831 | | |
814 | 832 | | |
815 | 833 | | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
816 | 838 | | |
817 | 839 | | |
818 | 840 | | |
819 | | - | |
| 841 | + | |
| 842 | + | |
820 | 843 | | |
821 | 844 | | |
822 | 845 | | |
| |||
Lines changed: 70 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
142 | 143 | | |
143 | 144 | | |
144 | 145 | | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
145 | 155 | | |
146 | 156 | | |
147 | 157 | | |
| |||
444 | 454 | | |
445 | 455 | | |
446 | 456 | | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
447 | 517 | | |
448 | 518 | | |
449 | 519 | | |
| |||
0 commit comments