Commit ddfb651
committed
finding 2: add WASM-compatible error recovery boundary in bbapi
In WASM builds, BB_NO_EXCEPTIONS is defined which compiles out the
try-catch in bbapi() and routes throw_or_abort to std::abort(). This
kills the WASM process on any error with no recovery.
Add a setjmp/longjmp recovery boundary: bbapi() calls setjmp before
execute(), and throw_or_abort_impl checks if recovery is active before
aborting. On error, longjmp returns control to bbapi() which returns
an ErrorResponse via the normal msgpack path.
longjmp skips C++ destructors on unwound stack frames, which can leak
memory. In WASM this is bounded by linear memory and acceptable vs
the alternative of process termination.
Enable the CBind.CatchesExceptionAndReturnsErrorResponse test for
BB_NO_EXCEPTIONS builds, since error recovery now works in both
native (try-catch) and no-exceptions (setjmp/longjmp) configurations.1 parent 4bb627d commit ddfb651
File tree
4 files changed
+59
-13
lines changed- barretenberg/cpp/src/barretenberg
- bbapi
- env
4 files changed
+59
-13
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
9 | 12 | | |
10 | 13 | | |
11 | 14 | | |
| |||
15 | 18 | | |
16 | 19 | | |
17 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
18 | 50 | | |
19 | 51 | | |
20 | 52 | | |
| |||
25 | 57 | | |
26 | 58 | | |
27 | 59 | | |
28 | | - | |
29 | | - | |
30 | 60 | | |
31 | | - | |
32 | 61 | | |
33 | 62 | | |
34 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
35 | 73 | | |
36 | 74 | | |
37 | 75 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
9 | 17 | | |
10 | 18 | | |
11 | 19 | | |
| |||
Lines changed: 2 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | | - | |
12 | | - | |
| 10 | + | |
| 11 | + | |
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
| |||
58 | 57 | | |
59 | 58 | | |
60 | 59 | | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
7 | 10 | | |
8 | 11 | | |
9 | 12 | | |
| |||
24 | 27 | | |
25 | 28 | | |
26 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
27 | 35 | | |
28 | 36 | | |
29 | 37 | | |
0 commit comments