Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Здесь можно сообщить о найденных багах в Far.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by HaRT »

Как воспроизвести:
0. Сохранить файл с текстом audiovideo video.
1. Открыть Фар без плагинов (проверял только в x86).
2. Открыть тот файл в Просмотрщике.
3. Запустить поиск строки video с выставленными [x] Whole words и [x] Case sensitive.

Ожидаю, что будет найдено сразу второе слово.
Получаю, что находится вторая часть первого.

Если убрать [x] Case sensitive, то ошибка не проявляется.

В сборке 5362 ошибки ещё нет, в — уже есть.
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

попробовал 5364 x64 - находит второе слово.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by Shmuel »

2useven10, полностью подтверждаю описание, данное HaRT. x86.
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

у меня 5462 х86 тоже находит второе слово...
покажите все настройки просмотра.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by Shmuel »

2useven10 wrote: Tue 03 Sep, 2019 19:38 может 5462/64 ?
В 5454 не повторяется.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by HaRT »

2useven10 wrote: Tue 03 Sep, 2019 19:31 попробовал 5364 x64 - находит второе слово.
Проверил x64 на чистом профиле — тоже второе, а в x86 (тоже на чистом) — хвост первого.
2useven10 wrote: Tue 03 Sep, 2019 19:40 покажите все настройки просмотра.
, притом [x] Save file position вроде не влияет.

Но ведь в x86 воспроизводится.
Last edited by HaRT on Tue 03 Sep, 2019 19:44, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

в транке на чистом профиле есть?
ок. попробую сам...
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

да на x86 удалось повторить...
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

Как-то там всё неочевидно.
Попытки отладки - компиляция с дебугом, вставка отладочных OutputDebugString() ошибку убирают.
По коду таких последствий вроде быть не должно.
За пару часов проблему мне решить не удалось, больше пока времени нет.
Так что позже, если кто-то возьмётся раньше - велкам...
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

Проблема в том, что компилятор инлайнит код

Code: Select all

static bool is_word_div(const wchar_t ch)
{
	static const wchar_t extra_div[] = { Utf::BOM_CHAR, Utf::REPLACE_CHAR };
	return !ch || std::iswspace(ch) || contains(Global->Opt->strWordDiv.Get(), ch) || contains(extra_div, ch);
}
так что для проверки принадлежности extra_div зовётся wcschr(ch, extra_div), а поскольку терминирующий '\0' там отсутствует, результат получается неожиданным.
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by 2useven10 »

Хотя собственно так contains и определён в string_utils.hpp
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by HaRT »

Спасибо, что разобрались в причинах!
2useven10 wrote: Fri 06 Sep, 2019 13:57 Проблема в том, что компилятор инлайнит код
По последующему описанию выходит, что проблема не столько в этом, сколько в том, что
2useven10 wrote: Fri 06 Sep, 2019 13:57 для проверки принадлежности extra_div зовётся wcschr(ch, extra_div)
Значит, ошибка в том, что вызывается contains(const wchar_t* const Str, wchar_t const What).
Получается, нужна ещё одна специализация — для массива. (Точнее, две, потому что для массивов charов тоже.)

Вообще странно, что оно не падало, при поиске символа выходя за границы массива и впоследствии за границы страницы памяти.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by DrKnS »

HaRT wrote: Fri 06 Sep, 2019 17:09 Получается, нужна ещё одна специализация — для массива. (Точнее, две, потому что для массивов charов тоже.)
Уже есть, но там всё немного сложнее.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Поиск в Просмотрщике (Viewer): не учитывается [x] Whole words, если выставлено [x] Case sensitive

Post by HaRT »

DrKnS wrote: Fri 06 Sep, 2019 18:21 Уже есть, но там всё немного сложнее.
Да, почитал я поподробнее на эту тему и немного расстроился. Получается, надо либо в той или иной форме явно указывать, что вызываем проверку именно для массива, либо завершать массивы нулями, чтобы они могли обрабатываться как строки.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Глюки и баги”