Skip to content

fix(zedit): read the yes/no answer by character, not by byte - #3796

Merged
bylins merged 1 commit into
masterfrom
fix/zedit-yesno-utf8
Aug 29, 2026
Merged

fix(zedit): read the yes/no answer by character, not by byte#3796
bylins merged 1 commit into
masterfrom
fix/zedit-yesno-utf8

Conversation

@bylins

@bylins bylins commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Найдено при сплошном проходе по байт-против-символа после #3795.

Что не так

Вопрос «сбрасывать ли пустую зону» в zedit разбирался через strchr по строке с кириллицей:

if (!arg[0] || !strchr("YyNnДдНн", arg[0])) {
    SendMsgToChar("Повторите ввод (y или n) : ", d->character.get());
} else {
    if (strchr("YyДд", arg[0]))

strchr сравнивает байты, а в UTF-8 «Д» (D0 94), «д» (D0 B4), «Н» (D0 9D) и «н» (D0 BD) начинаются с одного и того же байта — 0xD0. Значит любой русский ответ находился и в первом списке (принят), и во втором (истолкован как «да»). Ответ «н» ставил reset_idle = 1, то есть строго наоборот.

Латинские y и n работали правильно — они однобайтовые.

Что сделано

Ответ читается символом через native_text::first_char_code_lower и сверяется с 'y'/'n' и rus::kDe/rus::kEn. Регистр функция складывает сама, отдельные заглавные варианты не нужны.

Проверено

Сборка чистая, 669 тестов зелёные. Юнит-тестом не покрыть: разбор сидит внутри диалога OLC и требует дескриптора.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XUwDWDnYdXrJdvjDVd36QH

Вопрос про сброс пустой зоны разбирался через strchr по строке с кириллицей:

    if (!arg[0] || !strchr("YyNnДдНн", arg[0]))
        ...
    if (strchr("YyДд", arg[0]))

В UTF-8 "Д", "д", "Н" и "н" начинаются с одного и того же байта 0xD0, а strchr
сравнивает байты. Поэтому любой русский ответ находился в обоих списках, и
второй strchr отвечал "да" даже на "нет": флаг reset_idle выставлялся всегда.
Латинские y и n при этом работали правильно.

Ответ теперь читается символом (first_char_code_lower) и сверяется с 'y'/'n' и
константами rus::kDe/rus::kEn -- регистр функция складывает сама.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUwDWDnYdXrJdvjDVd36QH
@bylins
bylins merged commit 8823e65 into master Aug 29, 2026
20 checks passed
@bylins
bylins deleted the fix/zedit-yesno-utf8 branch August 29, 2026 11:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant