Комментарии 9
по исходному файлу убедиться в наличии проблемы невозможно, опять же из-за макросов.

А сколько макросов в таких проектах как OpenSSL!

Вот тогда я подобные статьи, но «тестируем Sping/Tomcat/Gradle» буду еще с большим нетерпением ждать!
Вот сходу же, первая тернарка — это не ошибка (странно думать, что разработчики языка не в курсе порядка операций, они в man perlop первым же делом дают приоритеты операций и отличия от Си). Он действительно вычитает из конца буфера либо 1 байт, либо размер UTF8. Далее, вычисление в sizeof — очевидно, что по раскрытиям макросов выражение используется и где-то как аргумент, и где-то для sizeof, просто передавая тот же аргумент, и очевидно, что в последнем случае вычисление в sizeof ни на что не влияет.

Насчет XS сходу сложнее, это надо в мануалы закапываться, а они большие :) Но, скорее всего, RETVAL (ведь тоже макрос!) таки действительно по дороге где-то выставляется каким-то другим кодом, а XSRETURN_EMPTY в конце — может быть по единообразию стиля для всех похожих функций, ничего страшного в его недостижимости нет.
Он действительно вычитает из конца буфера либо 1 байт, либо размер UTF8.

Но каким образом, если тернарный оператор исполняется последним?


Реально он вычитает из конца буфера переменную is_utf8, далее делает сравнение, и в зависимости от его результата берет либо 1 байт, либо размер UTF8. А потом приводит это все к булевому типу, получая тем самым всегда истинное условие.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Информация

Дата основания
2008
Местоположение
Россия
Сайт
www.viva64.com
Численность
31–50 человек
Дата регистрации

Блог на Хабре