Как стать автором
Обновить

Комментарии 9

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

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

Как у вас Java-версия продвигается?

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

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

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


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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий