Skip to content

binascii.a2b_base64 ignores padding inside a string #94703

Description

@DemiMarie

Bug report

The following code should raise binascii.Error but does not:

import binascii
binascii.a2b_base64(b'=aa==')

It appears (from looking at the source code) that this is also the case in 3.11, even in strict mode.

Your environment

  • CPython versions tested on: 3.10
  • Operating system and architecture: Fedora 36, Linux 5.15.52, x86_64

Activity

  1. yourlefthandman commented on Jul 9, 2022

    @yourlefthandman
    Contributor

    When running the code from main, the behaviour is as you expect it to be :)

    >>> binascii.a2b_base64(b'=aa==', strict_mode=True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    binascii.Error: Leading padding not allowed
    

    The following code handles it-

    if (strict_mode && ascii_len > 0 && ascii_data[0] == '=') {
        state = get_binascii_state(module);
        if (state) {
            PyErr_SetString(state->Error, "Leading padding not allowed");
        }
        goto error_end;
    }
    

    Looking at 3.11, i see the code is there too - link

  2. DemiMarie commented on Jul 10, 2022

    @DemiMarie
    Author

    Does it reject this input?

    import binascii
    binascii.a2b_base64(b'aaaa=aa==', strict_mode=True)
    

    ?

  3. yourlefthandman commented on Jul 10, 2022

    @yourlefthandman
    Contributor

    Yup :)

    >>> import binascii
    >>> binascii.a2b_base64(b'aaaa=aa==', strict_mode=True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    binascii.Error: Discontinuous padding not allowed
    
  4. Mohitduklan commented on Jul 24, 2022

    @Mohitduklan

    Is it because python 3.10.5 uses REF 4648. https://docs.python.org/3/library/base64.html

  5. idan22moral commented on Nov 4, 2022

    @idan22moral
    Contributor

    Hi @DemiMarie,
    This behavior is normal in 3.10, since the strict_mode flag was not introduced yet.
    In 3.11.0 it behaves as expected:

    Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import binascii
    >>> binascii.a2b_base64(b'=aa==')
    b'i'
    >>> binascii.a2b_base64(b'=aa==', strict_mode=True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    binascii.Error: Leading padding not allowed
    >>> binascii.a2b_base64(b'aaaa=aa==')
    b'i\xa6\x9ai'
    >>> binascii.a2b_base64(b'aaaa=aa==', strict_mode=True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    binascii.Error: Discontinuous padding not allowed
    

    For further information, please read:

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