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

Здесь можно сообщить о найденных багах в Far.
Post Reply
User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

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

Post by HaRT » Tue 03 Sep, 2019 19:19

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

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

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

В сборке 5362 ошибки ещё нет, в — уже есть.
Фар есть инструмент, а не нянька. © 2009 DrKnS

2useven10
Posts: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Tue 03 Sep, 2019 19:31

попробовал 5364 x64 - находит второе слово.

Shmuel
Posts: 5834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

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

Post by Shmuel » Tue 03 Sep, 2019 19:36

2useven10, полностью подтверждаю описание, данное HaRT. x86.


2useven10
Posts: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Tue 03 Sep, 2019 19:40

у меня 5462 х86 тоже находит второе слово...
покажите все настройки просмотра.

Shmuel
Posts: 5834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

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

Post by Shmuel » Tue 03 Sep, 2019 19:41

2useven10 wrote:
Tue 03 Sep, 2019 19:38
может 5462/64 ?
В 5454 не повторяется.

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

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

Post by HaRT » Tue 03 Sep, 2019 19:43

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: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Tue 03 Sep, 2019 19:47

в транке на чистом профиле есть?
ок. попробую сам...

2useven10
Posts: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Tue 03 Sep, 2019 20:44

да на x86 удалось повторить...

2useven10
Posts: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Thu 05 Sep, 2019 11:33

Как-то там всё неочевидно.
Попытки отладки - компиляция с дебугом, вставка отладочных OutputDebugString() ошибку убирают.
По коду таких последствий вроде быть не должно.
За пару часов проблему мне решить не удалось, больше пока времени нет.
Так что позже, если кто-то возьмётся раньше - велкам...

2useven10
Posts: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Fri 06 Sep, 2019 13:57

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

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: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Fri 06 Sep, 2019 14:01

Хотя собственно так contains и определён в string_utils.hpp

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

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

Post by HaRT » Fri 06 Sep, 2019 17:09

Спасибо, что разобрались в причинах!
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: 5338
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

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

Post by DrKnS » Fri 06 Sep, 2019 18:21

HaRT wrote:
Fri 06 Sep, 2019 17:09
Получается, нужна ещё одна специализация — для массива. (Точнее, две, потому что для массивов charов тоже.)
Уже есть, но там всё немного сложнее.

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

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

Post by HaRT » Fri 06 Sep, 2019 20:00

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

User avatar
DrKnS
Posts: 5338
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

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

Post by DrKnS » Fri 06 Sep, 2019 20:27

Не расстраивайтесь, это излечимо. 5468.

Post Reply

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