- Порезанный
- 7 августа 2026 г. в 05:11 UTC
- Автор
- Kamo
- Обещать
- b10c950
21670e5 маршрутизированный SocialWebhookController через вход UpstreamUri точка, но ее URL-адрес является гибридом: «токен» - это переменная @PathVariable, так что Весна передает вам Обрабатывающее значение DECODED, в то время как getQueryString() является сырым. Эта точка входа кодирует Ничего, что правильно для сырой половины и неправильно для расшифрованной — зеркало Изображение двойного кода всего набора изменений. POST /api/social/webhook/ab%252 Ccd приходит как строка ab%2Ccd, пересылается Дословно, и MediaService расшифровал его во второй раз вплоть до ab,cd. До 21670e5 это правильно, так что это была регрессия, а не ранее существовавшая дыра. Zero live impact: токены 32 hex chars **************** и так далее Кодирование-инерт, именно поэтому ничего не поймали. Контракт был перевернут Тем не менее, и первый не-хекс сегмент, добавленный к этому маршруту, был бы поврежден. Тихо. Переключен на гибридную точку входа, которая кодирует путь один раз через тот же UriComponentsBuilder вызов DefaultUriBuilderFactory делает и оставляет запрос нетронутым. Поведение при рукопожатии Meta/X не изменяется, что подтверждается четырьмя факторами. существующие тесты, которые до сих пор утверждают байт-идентичные строки запросов. Два новых теста заключают контракт с токеном ab%252Ccd, с и без запрос. Оба не соответствуют предыдущей точке входа с точностью до ab%2Ccd. Также исправляет два завышения в джавадоке UpstreamUri: Он утверждал, что гибридная форма предвосхищает «#» в декодированной переменной пути усечения. Запрос на фрагмент. Это не так: ******************* Расколы на '#' в точности как DefaultUriBuilderFactory за струной Перегрузка, поэтому поведение в любом случае не меняется. Неизменный - правильный звонок на публичной поверхности, но это не улучшение и не должно читаться как единое целое. Настоящая причина, по которой точки входа разделены, — это код один раз против всех. Вышеприведенное различие, о котором говорит теперь джавадок. - Пустая (не нулевая) строка запроса, используемая для получения следующего '?' и теперь дает Нет. Тот же запрос в соответствии с RFC 3986; отмечается в комментарии, поэтому его не принимают за Позже надзор. Проза и комментарии только для этих двух — никаких изменений в поведении. Сюита: 45 тестов, 0 отказов, 0 ошибок.