Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Tue 03 Sep, 2019 19:19
by HaRT
Как воспроизвести: 0. Сохранить файл с текстом audiovideo video. 1. Открыть Фар без плагинов (проверял только в x86). 2. Открыть тот файл в Просмотрщике. 3. Запустить поиск строки video с выставленными [x] Whole words и [x] Case sensitive.
Ожидаю, что будет найдено сразу второе слово. Получаю, что находится вторая часть первого.
Если убрать [x] Case sensitive, то ошибка не проявляется.
╔══════════════════════════════ Viewer ══════════════════════════════╗
║ [ ] Use external viewer for F3 instead of Alt+F3 ║
║ Viewer command: ║
║ ↓ ║
╟────────────────────────── Internal viewer ─────────────────────────╢
║ [ ] Persistent selection [x] Show scrolling arrows ║
║ [x] Search dialog auto-focus [x] Visible '\0' ║
║ 8 Tab size [x] Show scrollbar ║
╟────────────────────────────────────────────────────────────────────╢
║ [x] Save file position [x] Save view mode ║
║ [x] Save file code page [ ] Save wrap mode ║
║ [x] Save bookmarks [x] Detect dump view mode ║
║ 10000 Maximum line width [x] Autodetect code page ║
║ Default code page: ║
║ 1251 │ ANSI - Cyrillic ↓ ║
╟────────────────────────────────────────────────────────────────────╢
║ { OK } [ Cancel ] ║
╚════════════════════════════════════════════════════════════════════╝
, притом [x] Save file position вроде не влияет.
Но ведь
far.exe -p -ro -s %TEMP%\farprofile\%RANDOM%
в x86 воспроизводится.
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Tue 03 Sep, 2019 19:47
by 2useven10
в транке на чистом профиле есть?
ок. попробую сам...
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Tue 03 Sep, 2019 20:44
by 2useven10
да на x86 удалось повторить...
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Thu 05 Sep, 2019 11:33
by 2useven10
Как-то там всё неочевидно.
Попытки отладки - компиляция с дебугом, вставка отладочных OutputDebugString() ошибку убирают.
По коду таких последствий вроде быть не должно.
За пару часов проблему мне решить не удалось, больше пока времени нет.
Так что позже, если кто-то возьмётся раньше - велкам...
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
так что для проверки принадлежности extra_div зовётся wcschr(ch, extra_div), а поскольку терминирующий '\0' там отсутствует, результат получается неожиданным.
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Fri 06 Sep, 2019 14:01
by 2useven10
Хотя собственно так contains и определён в string_utils.hpp
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Fri 06 Sep, 2019 17:09
by HaRT
Спасибо, что разобрались в причинах!
2useven10 wrote: ↑Fri 06 Sep, 2019 13:57 Проблема в том, что компилятор инлайнит код
По последующему описанию выходит, что проблема не столько в этом, сколько в том, что
Значит, ошибка в том, что вызывается contains(const wchar_t* const Str, wchar_t const What).
Получается, нужна ещё одна специализация — для массива. (Точнее, две, потому что для массивов charов тоже.)
Вообще странно, что оно не падало, при поиске символа выходя за границы массива и впоследствии за границы страницы памяти.
Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive
Posted: Fri 06 Sep, 2019 18:21
by DrKnS
HaRT wrote: ↑Fri 06 Sep, 2019 17:09
Получается, нужна ещё одна специализация — для массива. (Точнее, две, потому что для массивов charов тоже.)
Да, почитал я поподробнее на эту тему и немного расстроился. Получается, надо либо в той или иной форме явно указывать, что вызываем проверку именно для массива, либо завершать массивы нулями, чтобы они могли обрабатываться как строки.