Commit 60fc9f8
committed
fix: prevent exponential type re-traversal in SwiftCxxBridgedType
`getRequiredImports()` and `getExtraFiles()` in nitrogen's
`SwiftCxxBridgedType` (the TypeScript class that generates the
Swift <-> C++ bridge code) have no protection against re-traversing
the same type from multiple paths in the type graph, causing
exponential blowup and a "Maximum call stack size exceeded" crash
for projects with many interconnected struct types.
mrousavy#1247 added a visited-set guard to the equivalent
`KotlinCxxBridgedType`; this applies the same per-call-tree
visited-set guard to `SwiftCxxBridgedType`, which still crashes
on large specs.
Fixes mrousavy#10791 parent 12756ea commit 60fc9f8
1 file changed
Lines changed: 14 additions & 5 deletions
Lines changed: 14 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
131 | | - | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
| |||
154 | 160 | | |
155 | 161 | | |
156 | 162 | | |
157 | | - | |
| 163 | + | |
158 | 164 | | |
159 | 165 | | |
160 | 166 | | |
161 | 167 | | |
162 | 168 | | |
163 | | - | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
164 | 173 | | |
165 | 174 | | |
166 | 175 | | |
| |||
170 | 179 | | |
171 | 180 | | |
172 | 181 | | |
173 | | - | |
| 182 | + | |
174 | 183 | | |
175 | 184 | | |
176 | 185 | | |
| |||
209 | 218 | | |
210 | 219 | | |
211 | 220 | | |
212 | | - | |
| 221 | + | |
213 | 222 | | |
214 | 223 | | |
215 | 224 | | |
| |||
0 commit comments