Skip to content

test added in gh-104067 has an fstring with an invalid escape sequence #105784

Description

@mattip

Bug report

In response to #104049, a fix and a new test were added in #104067 and related PRs. The test in test_httpserver.py uses an fstring with an escape sequence, but does not use r:

f'listing for {self.base_url}/\?x=123'

I think the code (in two places) should be include an r: fr'listing for ...

On PyPy this is causing the test___all__.py test to fail, since it emits a warning when compiling the *.py to *.pyc. I am not sure why CPython is not seeing a similar problem. Perhaps compileall is run first? Or the warning filter captures the compilation as well as the import?

Your environment

  • CPython versions tested on: PyPy3.9 HEAD using stdlib 3.9.17
  • Operating system and architecture: any

Activity

  1. added
    type-bugAn unexpected behavior, bug, or error
    on Jun 14, 2023
  2. terryjreedy commented on Jun 14, 2023

    @terryjreedy
    Member

    @mattip CPython does not issue this warning SyntaxWarning: invalid escape sequence '\?' until 3.12, though only for normal strings. What warning is PyPy3.9 emitting? (Note: try to minimize reproducing examples, as I did below ;-)

    @pablogsal In 3.12 and 3.13, f-strings are not warning about invalid escapes that get warnings in real strings. This seems like a bug.

    >>> f'\?'
    '\\?'
    >>> len(f'\?')
    2
    >>> '\?'
    <stdin>:1: SyntaxWarning: invalid escape sequence '\?'
    '\\?'
    
    
  3. mattip commented on Jun 14, 2023

    @mattip
    ContributorAuthor

    On python3.9.17 from Ubuntu, I get this

    $ python3.9 -Walways -c "abc = 'abc'; print(f'listing for {abc}/\?x=123')"
    <string>:1: DeprecationWarning: invalid escape sequence \?
    listing for abc/\?x=123
    
  4. mattip commented on Jun 14, 2023

    @mattip
    ContributorAuthor

    Adding an r makes it run without a warning

    $ python3.9 -Walways -c "abc = 'abc'; print(fr'listing for {abc}/\?x=123')"
    listing for abc/\?x=123
    
  5. terryjreedy commented on Jun 14, 2023

    @terryjreedy
    Member

    Security patch #104067 was backported to 3.7, which is why it affects PyPy3.9.

    @ethanfurman @JelleZijlstra Do the tests added in #104067 require invalid escapes without an 'r' prefix? Or could the escape be changed or the 'r' added?

  6. pablogsal commented on Jun 15, 2023

    @pablogsal
    Member

    @pablogsal In 3.12 and 3.13, f-strings are not warning about invalid escapes that get warnings in real strings. This seems like a bug.

    Fixed!

  7. mattip commented on Jun 15, 2023

    @mattip
    ContributorAuthor

    Thanks. I see that was backported to 3.12. I am curious why not backport it to all versions that contain the test added in #104067 (maybe excepting ones that will no longer be released)? People running the test without precompiling pyc files will see a DeprecationWarning, no?

    Edit: GAA, I didn't actually look at the fix: #105800 is not what I expected.

  8. mattip commented on Jun 15, 2023

    @mattip
    ContributorAuthor

    Try as I might, I cannot get CPython3.9 to emit a DeprecationWarning in the test_httpservers.py test. So I will add the r in the PyPy port of the stdlib tests. I am not sure why the test does not emit the warning on CPython3.9, since the f-string needs an r if run outside the test, but 🤷

    $ python3.9 -Walways -c "abc = 'abc'; print(f'listing for {abc}/\?x=123')"
    <string>:1: DeprecationWarning: invalid escape sequence \?
    listing for abc/\?x=123
    
  9. pablogsal commented on Jun 15, 2023

    @pablogsal
    Member

    Relevant: #105821

  10. lysnikolaou commented on Jun 20, 2023

    @lysnikolaou
    Member

    This can be closed. @mattip An r prefix has been added in #105822.

  11. lazka commented on Jun 23, 2023

    @lazka
    Contributor

    Here it only warned/failed when bytecompile was needed, so if there wasn't a .pyc file already for test_httpservers.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions