Skip to content

Bump dependabot/fetch-metadata from 2 to 3#12344

Open
dependabot[bot] wants to merge 1 commit into3.14from
dependabot/github_actions/3.14/dependabot/fetch-metadata-3
Open

Bump dependabot/fetch-metadata from 2 to 3#12344
dependabot[bot] wants to merge 1 commit into3.14from
dependabot/github_actions/3.14/dependabot/fetch-metadata-3

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot bot commented on behalf of github Apr 9, 2026

Bumps dependabot/fetch-metadata from 2 to 3.

Release notes

Sourced from dependabot/fetch-metadata's releases.

v3.0.0

The breaking change is requiring Node.js version v24 as the Actions runtime.

What's Changed

New Contributors

Full Changelog: dependabot/fetch-metadata@v2...v3.0.0

v2.5.0

What's Changed

... (truncated)

Commits
  • ffa630c v3.0.0 (#686)
  • ec8fff2 Merge pull request #674 from dependabot/dependabot/npm_and_yarn/picomatch-2.3.2
  • caf48bd build(deps-dev): bump picomatch from 2.3.1 to 2.3.2
  • 13d8274 Upgrade @​actions/github to ^9.0.0 and @​octokit/request-error to ^7.1.0 (#678)
  • b603099 Upgrade @​actions/core from ^1.11.1 to ^3.0.0 (#677)
  • c5dc5b1 Enable noImplicitAny in tsconfig.json (#684)
  • a183f3c Add typecheck step to CI (#685)
  • 5e17564 Remove skipLibCheck from tsconfig.json (#683)
  • bb56eeb Switch tsconfig module resolution to bundler (#682)
  • 3632e3d Remove vestigial outDir from tsconfig.json (#681)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2 to 3.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](dependabot/fetch-metadata@v2...v3)

---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Apr 9, 2026
@dependabot dependabot bot requested a review from webknjaz as a code owner April 9, 2026 10:39
@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Apr 9, 2026
@github-actions github-actions bot enabled auto-merge (squash) April 9, 2026 10:39
@codecov
Copy link
Copy Markdown

codecov bot commented Apr 9, 2026

❌ 3 Tests Failed:

Tests completed Failed Passed Skipped
4444 3 4441 99
View the top 1 failed test(s) by shortest run time
tests.test_cookie_helpers::test_parse_set_cookie_headers_uses_unquote_with_octal[complex="\\042quoted\\042 text with \\012 newline"-complex-"quoted" text with \n newline-"\\042quoted\\042 text with \\012 newline"]
Stack Traces | 0.006s run time
header = 'complex="\\042quoted\\042 text with \\012 newline"'
expected_name = 'complex', expected_value = '"quoted" text with \n newline'
expected_coded = '"\\042quoted\\042 text with \\012 newline"'

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        (#x1B[33m"#x1B[39;49;00m#x1B[33mheader#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_name#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_value#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_coded#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        [#x1B[90m#x1B[39;49;00m
            #x1B[90m# Test cookie values with octal escape sequences#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            (#x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mname=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012newline#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mname#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33mnewline#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012newline#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mtab=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011separated#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011values#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mtab#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33m\t#x1B[39;49;00m#x1B[33mseparated#x1B[39;49;00m#x1B[33m\t#x1B[39;49;00m#x1B[33mvalues#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011separated#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011values#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mmixed=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhello#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m040world#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m041#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mmixed#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mhello world!#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhello#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m040world#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m041#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mcomplex=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042quoted#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042 text with #x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012 newline#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mcomplex#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mquoted#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m text with #x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m newline#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042quoted#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042 text with #x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012 newline#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
        ],#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_parse_set_cookie_headers_uses_unquote_with_octal#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        header: #x1B[96mstr#x1B[39;49;00m, expected_name: #x1B[96mstr#x1B[39;49;00m, expected_value: #x1B[96mstr#x1B[39;49;00m, expected_coded: #x1B[96mstr#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Test that parse_set_cookie_headers correctly unquotes values with octal sequences and preserves coded_value."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       result = parse_set_cookie_headers([header])#x1B[90m#x1B[39;49;00m
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m

expected_coded = '"\\042quoted\\042 text with \\012 newline"'
expected_name = 'complex'
expected_value = '"quoted" text with \n newline'
header     = 'complex="\\042quoted\\042 text with \\012 newline"'

#x1B[1m#x1B[31mtests/test_cookie_helpers.py#x1B[0m:1124: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31maiohttp/_cookie_helpers.py#x1B[0m:330: in parse_set_cookie_headers
    #x1B[0mcurrent_morsel.__setstate__(  #x1B[90m# type: ignore[attr-defined]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        current_morsel = <Morsel: None=None>
        header     = 'complex="\\042quoted\\042 text with \\012 newline"'
        headers    = ['complex="\\042quoted\\042 text with \\012 newline"']
        i          = 47
        key        = 'complex'
        lower_key  = 'complex'
        match      = <re.Match object; span=(0, 47), match='complex="\\042quoted\\042 text with \\012 newline>
        morsel_seen = False
        n          = 47
        parsed_cookies = []
        value      = '"\\042quoted\\042 text with \\012 newline"'
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Morsel: None=None>
state = {'coded_value': '"\\042quoted\\042 text with \\012 newline"', 'key': 'complex', 'value': '"quoted" text with \n newline'}

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__setstate__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, state):#x1B[90m#x1B[39;49;00m
        key = state[#x1B[33m'#x1B[39;49;00m#x1B[33mkey#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        value = state[#x1B[33m'#x1B[39;49;00m#x1B[33mvalue#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        coded_value = state[#x1B[33m'#x1B[39;49;00m#x1B[33mcoded_value#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m _has_control_character(key, value, coded_value):#x1B[90m#x1B[39;49;00m
>           #x1B[94mraise#x1B[39;49;00m CookieError(#x1B[33m"#x1B[39;49;00m#x1B[33mControl characters are not allowed in cookies #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                              #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mkey#x1B[33m!r}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mvalue#x1B[33m!r}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mcoded_value#x1B[33m!r}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           http.cookies.CookieError: Control characters are not allowed in cookies 'complex' '"quoted" text with \n newline' '"\\042quoted\\042 text with \\012 newline"'#x1B[0m

coded_value = '"\\042quoted\\042 text with \\012 newline"'
key        = 'complex'
self       = <Morsel: None=None>
state      = {'coded_value': '"\\042quoted\\042 text with \\012 newline"', 'key': 'complex', 'value': '"quoted" text with \n newline'}
value      = '"quoted" text with \n newline'

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.4.../x64-freethreaded/lib/python3.14t/http/cookies.py#x1B[0m:379: CookieError
View the full list of 2 ❄️ flaky test(s)
tests.test_cookie_helpers::test_parse_set_cookie_headers_uses_unquote_with_octal[name="\\012newline\\012"-name-\nnewline\n-"\\012newline\\012"]

Flake rate in main: 9.09% (Passed 10 times, Failed 1 times)

Stack Traces | 0.006s run time
header = 'name="\\012newline\\012"', expected_name = 'name'
expected_value = '\nnewline\n', expected_coded = '"\\012newline\\012"'

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        (#x1B[33m"#x1B[39;49;00m#x1B[33mheader#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_name#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_value#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_coded#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        [#x1B[90m#x1B[39;49;00m
            #x1B[90m# Test cookie values with octal escape sequences#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            (#x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mname=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012newline#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mname#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33mnewline#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012newline#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mtab=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011separated#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011values#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mtab#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33m\t#x1B[39;49;00m#x1B[33mseparated#x1B[39;49;00m#x1B[33m\t#x1B[39;49;00m#x1B[33mvalues#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011separated#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011values#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mmixed=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhello#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m040world#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m041#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mmixed#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mhello world!#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhello#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m040world#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m041#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mcomplex=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042quoted#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042 text with #x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012 newline#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mcomplex#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mquoted#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m text with #x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m newline#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042quoted#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042 text with #x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012 newline#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
        ],#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_parse_set_cookie_headers_uses_unquote_with_octal#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        header: #x1B[96mstr#x1B[39;49;00m, expected_name: #x1B[96mstr#x1B[39;49;00m, expected_value: #x1B[96mstr#x1B[39;49;00m, expected_coded: #x1B[96mstr#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Test that parse_set_cookie_headers correctly unquotes values with octal sequences and preserves coded_value."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       result = parse_set_cookie_headers([header])#x1B[90m#x1B[39;49;00m
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m

expected_coded = '"\\012newline\\012"'
expected_name = 'name'
expected_value = '\nnewline\n'
header     = 'name="\\012newline\\012"'

#x1B[1m#x1B[31mtests/test_cookie_helpers.py#x1B[0m:1124: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31maiohttp/_cookie_helpers.py#x1B[0m:330: in parse_set_cookie_headers
    #x1B[0mcurrent_morsel.__setstate__(  #x1B[90m# type: ignore[attr-defined]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        current_morsel = <Morsel: None=None>
        header     = 'name="\\012newline\\012"'
        headers    = ['name="\\012newline\\012"']
        i          = 22
        key        = 'name'
        lower_key  = 'name'
        match      = <re.Match object; span=(0, 22), match='name="\\012newline\\012"'>
        morsel_seen = False
        n          = 22
        parsed_cookies = []
        value      = '"\\012newline\\012"'
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Morsel: None=None>
state = {'coded_value': '"\\012newline\\012"', 'key': 'name', 'value': '\nnewline\n'}

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__setstate__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, state):#x1B[90m#x1B[39;49;00m
        key = state[#x1B[33m'#x1B[39;49;00m#x1B[33mkey#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        value = state[#x1B[33m'#x1B[39;49;00m#x1B[33mvalue#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        coded_value = state[#x1B[33m'#x1B[39;49;00m#x1B[33mcoded_value#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m _has_control_character(key, value, coded_value):#x1B[90m#x1B[39;49;00m
>           #x1B[94mraise#x1B[39;49;00m CookieError(#x1B[33m"#x1B[39;49;00m#x1B[33mControl characters are not allowed in cookies #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                              #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mkey#x1B[33m!r}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mvalue#x1B[33m!r}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mcoded_value#x1B[33m!r}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           http.cookies.CookieError: Control characters are not allowed in cookies 'name' '\nnewline\n' '"\\012newline\\012"'#x1B[0m

coded_value = '"\\012newline\\012"'
key        = 'name'
self       = <Morsel: None=None>
state      = {'coded_value': '"\\012newline\\012"', 'key': 'name', 'value': '\nnewline\n'}
value      = '\nnewline\n'

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.4.../x64-freethreaded/lib/python3.14t/http/cookies.py#x1B[0m:379: CookieError
tests.test_cookie_helpers::test_parse_set_cookie_headers_uses_unquote_with_octal[tab="\\011separated\\011values"-tab-\tseparated\tvalues-"\\011separated\\011values"]

Flake rate in main: 4.76% (Passed 20 times, Failed 1 times)

Stack Traces | 0.012s run time
header = 'tab="\\011separated\\011values"', expected_name = 'tab'
expected_value = '\tseparated\tvalues'
expected_coded = '"\\011separated\\011values"'

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        (#x1B[33m"#x1B[39;49;00m#x1B[33mheader#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_name#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_value#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mexpected_coded#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        [#x1B[90m#x1B[39;49;00m
            #x1B[90m# Test cookie values with octal escape sequences#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            (#x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mname=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012newline#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mname#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33mnewline#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012newline#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mtab=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011separated#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011values#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mtab#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33m\t#x1B[39;49;00m#x1B[33mseparated#x1B[39;49;00m#x1B[33m\t#x1B[39;49;00m#x1B[33mvalues#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011separated#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m011values#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mmixed=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhello#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m040world#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m041#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mmixed#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mhello world!#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhello#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m040world#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m041#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            (#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mcomplex=#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042quoted#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042 text with #x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012 newline#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m"#x1B[39;49;00m#x1B[33mcomplex#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mquoted#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m text with #x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m newline#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[33mr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042quoted#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m042 text with #x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m012 newline#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
        ],#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_parse_set_cookie_headers_uses_unquote_with_octal#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        header: #x1B[96mstr#x1B[39;49;00m, expected_name: #x1B[96mstr#x1B[39;49;00m, expected_value: #x1B[96mstr#x1B[39;49;00m, expected_coded: #x1B[96mstr#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Test that parse_set_cookie_headers correctly unquotes values with octal sequences and preserves coded_value."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       result = parse_set_cookie_headers([header])#x1B[90m#x1B[39;49;00m
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m

expected_coded = '"\\011separated\\011values"'
expected_name = 'tab'
expected_value = '\tseparated\tvalues'
header     = 'tab="\\011separated\\011values"'

#x1B[1m#x1B[31mtests/test_cookie_helpers.py#x1B[0m:1124: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31maiohttp/_cookie_helpers.py#x1B[0m:330: in parse_set_cookie_headers
    #x1B[0mcurrent_morsel.__setstate__(  #x1B[90m# type: ignore[attr-defined]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        current_morsel = <Morsel: None=None>
        header     = 'tab="\\011separated\\011values"'
        headers    = ['tab="\\011separated\\011values"']
        i          = 29
        key        = 'tab'
        lower_key  = 'tab'
        match      = <re.Match object; span=(0, 29), match='tab="\\011separated\\011values"'>
        morsel_seen = False
        n          = 29
        parsed_cookies = []
        value      = '"\\011separated\\011values"'
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Morsel: None=None>
state = {'coded_value': '"\\011separated\\011values"', 'key': 'tab', 'value': '\tseparated\tvalues'}

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__setstate__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, state):#x1B[90m#x1B[39;49;00m
        key = state[#x1B[33m'#x1B[39;49;00m#x1B[33mkey#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        value = state[#x1B[33m'#x1B[39;49;00m#x1B[33mvalue#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        coded_value = state[#x1B[33m'#x1B[39;49;00m#x1B[33mcoded_value#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m _has_control_character(key, value, coded_value):#x1B[90m#x1B[39;49;00m
>           #x1B[94mraise#x1B[39;49;00m CookieError(#x1B[33m"#x1B[39;49;00m#x1B[33mControl characters are not allowed in cookies #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                              #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mkey#x1B[33m!r}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mvalue#x1B[33m!r}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mcoded_value#x1B[33m!r}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           http.cookies.CookieError: Control characters are not allowed in cookies 'tab' '\tseparated\tvalues' '"\\011separated\\011values"'#x1B[0m

coded_value = '"\\011separated\\011values"'
key        = 'tab'
self       = <Morsel: None=None>
state      = {'coded_value': '"\\011separated\\011values"', 'key': 'tab', 'value': '\tseparated\tvalues'}
value      = '\tseparated\tvalues'

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.4.../x64-freethreaded/lib/python3.14t/http/cookies.py#x1B[0m:379: CookieError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Apr 9, 2026

Merging this PR will not alter performance

✅ 61 untouched benchmarks
⏩ 4 skipped benchmarks1


Comparing dependabot/github_actions/3.14/dependabot/fetch-metadata-3 (f045ee2) with 3.14 (4cad257)

Open in CodSpeed

Footnotes

  1. 4 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants