К обсуждениям

Python 3.15 RC1: canonical Base64 и ненулевые padding bits

Редакция VOne Технологии

Практическая проверка Python 3.15 RC1: как проверить canonical Base64 decoding Python 3.15 и не принять разные строки за один байтовый payload. Изолированный fixture, отрицательный контроль, заранее заданный критерий и безопасный пакет диагностики.

Одинаковые bytes, разные строки

Python 3.15 добавляет canonical parameter в Base32/Base64/Base85 decoders, чтобы отклонять формы с ненулевыми padding bits и другие неканонические варианты. Это подтверждает только границу функции, а не наличие проблемы в конкретном проекте. Практический симптом уже: Две разные текстовые строки декодируются в одинаковые bytes, поэтому подпись, cache key или сравнение исходной строки расходятся с проверкой decoded payload. До изменения кода зафиксируйте версию runtime, способ установки, один ожидаемый результат и один отрицательный исход. RC1 остаётся предварительным выпуском: его проверяют в отдельной среде, не ставят поверх рабочего interpreter и не используют один удачный запуск как разрешение на migration.

Эталон и неканонический fixture

Рекомендуемый fixture: взять короткий синтетический bytes payload, получить эталон encoder-выход и отдельный неканонический fixture из официального теста, затем декодировать с canonical=False и canonical=True. Дайте ему метку T23-13, отдельный temp root и короткий deadline. Входы должны быть синтетическими, повторяемыми и минимальными; каждый новый запуск получает новые объекты и процесс, если cache или global state способны изменить наблюдение. До опыта запишите точную команду и ожидаемый class результата. Не включайте рабочие конфиги, адреса, токены, персональные строки, production PID или полные environment dumps.

Четыре ветки decoder

Опровергающий маршрут: добавить валидный padded, допустимый unpadded согласно выбранному API, ошибочный alphabet и truncated input; каждую форму хранить как hex/ASCII fixture без пользовательских токенов. Собирайте строки формата «текстовая форма | canonical bytes | canonical flag | decoded result | exception class | re-encode совпал». Порядок control A, target B, fresh control A2 обнаруживает загрязнение fixture: если A2 расходится с A, итог нельзя помечать passed. Пустое поле не равно нулю, отсутствие exception не доказывает правильную семантику, а изменение двух параметров сразу лишает опыт диагностической силы. Соседние причины получают отдельные строки, а не удобное общее объяснение.

Round-trip как часть критерия

Зелёный критерий сформулирован заранее: эталон проходит и round-trip совпадает, а неканоническая форма отклоняется при строгом режиме; alphabet и truncation не смешиваются с padding-bit веткой. Ветка not reproduced означает только отсутствие симптома в этой версии fixture; blocked означает нехватку capability или источника; failed control возвращает расследование к стенду. Стоп-линия: {item['stop']}. Нельзя добиваться зелёного результата отключением проверки, broad except, ростом лимита, повторением до случайного успеха или подменой предварительного release стабильным обещанием. После теста удаляются только созданные temp-ресурсы.

Миграция протокола без секретов

Для maintainer или поддержки подготовьте: несколько байтов fixtures, их безопасные текстовые формы, параметры decoder, exception classes и версия runtime без реальных идентификаторов. Добавьте label T23-13, московский timestamp, точную версию RC и формулировку критерия «эталон проходит и round-trip совпадает, а неканоническая форма отклоняется при строгом режиме; alphabet и truncation не смешиваются с padding-bit веткой». Секреты, IP, hostnames, usernames, абсолютные домашние пути и полные логи удалите. Официальные источники подтверждают изменение «Python 3.15 добавляет canonical parameter в Base32/Base64/Base85 decoders, чтобы отклонять формы с ненулевыми padding bits и другие неканонические варианты.», но не подтверждают результат вашего теста, частоту проблемы или необходимость менять production. Такой пакет позволяет воспроизвести одну ветку, не раскрывая данные и не смешивая её с соседними issues.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.