Repository navigation
Commit f1fedec
committed
Reset serialization state before request input processing
Serialization and unserialization contexts are stored in module globals, but
their allocations belong to the current request heap. If a bailout skips the
normal context cleanup, those globals can retain pointers to memory that is
freed at request shutdown.
The next request can process input before module RINIT runs. In particular,
multipart upload-progress handling can invoke session serialization during
input parsing, before the existing RINIT reset. It may therefore observe the
previous request’s stale context and lock state. Resetting only in RINIT is
too late to protect this path.
Clear the serialization lock and both context structures at the beginning of
request startup, before input processing. This discards the bookkeeping without
following potentially invalid pointers or running destructors. Remove the
redundant reset from basic-module RINIT.
Add regression coverage that abandons serialize or unserialize state via a
bailout, then sends a multipart upload-progress request to the same worker.
Verify the follow-up request sees cleared state for locked and unlocked cases.
Validation: the regression passes with the startup reset alone and fails when
both resets are removed.1 parent 9705fda commit f1fedec
11 files changed
Lines changed: 251 additions & 10 deletions
File tree
- Zend/tests
- ext
- standard
- zend_test
- main
- sapi/cli/tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
390 | 390 | | |
391 | 391 | | |
392 | 392 | | |
393 | | - | |
394 | | - | |
395 | | - | |
396 | | - | |
397 | 393 | | |
398 | 394 | | |
399 | 395 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
29 | 32 | | |
30 | 33 | | |
31 | 34 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1406 | 1406 | | |
1407 | 1407 | | |
1408 | 1408 | | |
| 1409 | + | |
| 1410 | + | |
| 1411 | + | |
| 1412 | + | |
| 1413 | + | |
| 1414 | + | |
| 1415 | + | |
| 1416 | + | |
1409 | 1417 | | |
1410 | 1418 | | |
1411 | 1419 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| |||
200 | 201 | | |
201 | 202 | | |
202 | 203 | | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
203 | 236 | | |
204 | 237 | | |
205 | 238 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
301 | 301 | | |
302 | 302 | | |
303 | 303 | | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
304 | 308 | | |
305 | 309 | | |
306 | 310 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1854 | 1854 | | |
1855 | 1855 | | |
1856 | 1856 | | |
| 1857 | + | |
| 1858 | + | |
1857 | 1859 | | |
1858 | 1860 | | |
1859 | 1861 | | |
| |||
0 commit comments