Описание:
Ошибка привела к остановке взаимодействия программы с Windows.
Сигнатура проблемы:
Имя события проблемы: AppHangB1
Имя приложения: AkelPad.exe
Версия приложения: 4.9.1.0
Отметка времени приложения: 5413570f
Сигнатура зависания: 4493
Тип зависания: 0
Версия ОС: 6.1.7601.2.1.0.256.48
Код языка: 1049
Доп. сигнатура зависания 1: 449372ca9f28b7848783bf8964514e82
Доп. сигнатура зависания 2: ddc1
Доп. сигнатура зависания 3: ddc172ecc60f38a4ce00cadeaa736c96
Доп. сигнатура зависания 4: 4493
Доп. сигнатура зависания 5: 449372ca9f28b7848783bf8964514e82
Доп. сигнатура зависания 6: ddc1
Доп. сигнатура зависания 7: ddc172ecc60f38a4ce00cadeaa736c96
Не совсем понял: в чем суть теста? AkelPad не должен падать в любом случае?
З.Ы. В QuotesRE 189 правил, однако...
Добавлено:
Опять гоню, успел откатиться на Last modification: 2014.01.11 20:20 и поленился сливать - взял крайнюю версию из репозитория. С версией отсюда вроде нормально.
Я так пониманию, что на текущий момент с этим файлом падают все версии 4.9.0+, из-за того что правила жадности регекспов поменялись.
У меня на тестовом файле крепко подвисают Акелы 4.9.0 и этот тестовый Акель.
Skif_off
а я уже внёс
С ahk.coder с гитхаба по той ссылке - у меня пока ничего не падает, правда там все самые сложные случаи подсветки (почти всё, кроме команд) - закомментировано, но я потихоньку и эти правила пилю.
которое способно сейчас положить акелпад на файле с длинными строками, содержащими множественные кавычки, например на этом, если его быстро поскроллить туда-сюда.
завешивало Акел на файле, содержащем "GoTo". Я признаю, что выражение вида 'a(b*c*)*' выглядит несколько странно но (!) зависон наблюдался из поиска и кодера, а в QSearch всё работало нормально. Собственно, из-за чего и не репортил - привык проверять корректность регулярок в QSearch и никак не мог отловить проблемное выражение.
Serge Yolkin wrote:Я признаю, что выражение вида 'a(b*c*)*' выглядит несколько странно
Вовсе не странное выражение.
Единственное, что с новым парсером, по моему опыту, лучше жадность явно задавать: хочется жадности? 'a(b*+c*+)*+'.
Хочется скромности? 'a(b*?c*?)*?' или просто 'a'
Serge Yolkin wrote:Я признаю, что выражение вида 'a(b*c*)*' выглядит несколько странно но (!) зависон наблюдался из поиска и кодера, а в QSearch всё работало нормально.
В QSearch применяется "хак", убирающий завершающие * или + (кроме экранированных \* и \+ ).
Смысл "хака" в том, что выражения вида .* и .+ до сих пор остаются "сверхжадными", выделяя весь файл до конца, что неприемлемо для QSearch в режиме "поиска на лету" с регулярными выражениями (так как при наборе выражения вида A.+B в процессе набора A.+ выделялся бы весь файл до конца, а с донабором завершающего B выделение отступало бы назад).
Оба правила приводят к ошибке.
Суть правила заключается в том, чтобы подсвечивать только такой ByRef, перед которым находится открывающая скобка (и сколько угодно пробелов после неё).
Positive lookbehind'ы поломались?
С другой стороны, они теперь и не нужны: старых конфликтов между двумя разными правилами я больше не наблюдаю, всё что не попадает в группу захвата - остаётся "доступным" для других правил, так что во избежание возможных новых поломок - я бы лучше оставил всё, как есть сейчас.