Commit e02b1f7
committed
gh-154546: Make http.cookies.BaseCookie.load() atomic on error
BaseCookie.load() parses the whole cookie string before applying it, but
the key and attribute legality checks run during the apply phase (inside
Morsel.set() and Morsel.__setitem__()). An illegal key or unknown
$-prefixed attribute part-way through the string therefore raised
CookieError only after the earlier cookies had already been written to the
jar, leaving it in a partially-updated state.
Build the morsels in a temporary mapping and only commit them to the
cookie jar once the entire string has been validated, so load() is now
all-or-nothing. Existing morsels are copied before being updated, so a
failing load() no longer mutates cookies that were already present.1 parent 6c026ad commit e02b1f7
3 files changed
Lines changed: 49 additions & 3 deletions
File tree
- Lib
- http
- test
- Misc/NEWS.d/next/Library
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
624 | 624 | | |
625 | 625 | | |
626 | 626 | | |
627 | | - | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
628 | 632 | | |
629 | 633 | | |
630 | 634 | | |
| |||
633 | 637 | | |
634 | 638 | | |
635 | 639 | | |
636 | | - | |
637 | | - | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
638 | 652 | | |
639 | 653 | | |
640 | 654 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
320 | 320 | | |
321 | 321 | | |
322 | 322 | | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
323 | 351 | | |
324 | 352 | | |
325 | 353 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
0 commit comments