+  HandyCache форум
|-+  Главная категория» Новые предложения» BugReport
Имя пользователя:
Пароль:
Страниц: [1]   Вниз
  Отправить эту тему    Печать  
Автор Тема: BugReport  (Прочитано 4158 раз)
0 Пользователей и 1 Гость смотрят эту тему.
animalia
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 6


« : 10 Январь 2016, 17:34:15 »

Маленький такой баг, который вешает HandyCache намертво.
Преамбула.
В регэкспах есть такой эскейп-символ как \xYZ. Что он делает? самую малось - возвращает символ шестнадцатеричного кода YZ.

Собственно баг в том что при попытке использовать эскейп \x HandyCache загружает процессор на все 100% (ну если совсем честно, то только на 25% - ибо 4 ядра) и перестает отвечать на запросы, и вообще ни на что не реагирует. Приходится вырубать его из диспетчера задач. (и опять справедливости ради, однажды пока ждал когда HandyCache одумается он ругнулся что то про FastMM и сам закрылся, каюсь - скриншот не сделал Отлично!)

То есть правило
Код:
#5#~#False#~#\%([0-9A-F]{2})#~#\x\1#~#True#~#True
в списке Преобразование URL на запрос
Код:
somesite.​com/​test.​php?​re=​%2F
по идее должен вернуть один единственный символ - /. Причем не важно где его использовать, в тренажере реакция такая-же.
НО! Зависание происходит только в случае если шестнадцатеричный код передается как параметр. Если код символа указать явно, то все ок.
Например конструкция \x2F без проблем возвращает /

Причем некоторые символы декодируются на автомате и без правила (по крайней мере в мониторе коды буквенных символов отображаются самими символами, хотя возможно это браузер их транслирует). В принципе и без него жить можно просто очень сильно облегчило бы жизнь при обработке редиректов и прочих где среди параметров передаются другие URL.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +272/-14
Offline Offline

Сообщений: 5080



« Ответ #1 : 03 Апрель 2016, 23:35:04 »

Оставляя за скобками необходимость использования в Замене конструкции вида '\x\1', подтверждаю наличие бага.
НС виснет намертво, потребляя все процессорные ресурсы.
Сообщить модератору   Записан
animalia
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 6


« Ответ #2 : 04 Апрель 2016, 19:46:49 »

Если честно, то я начинаю думать "а баг ли это вообще". Дело в том, что заинтересовавшись данной темой почитал несколько ресурсов и книг, и могу резюмировать \x используют чтоб указать непечатаемый символ (или всякие буквы с  диакритическими символами), при этом код символа передают явно. С другой стороны я не разу не встретил указания что конструкцию \x\1 запрещено (или нежелательно) использовать.
То есть налицо ситуация 'никто не разрешал и никто не запрещал'.
Лично я решил эту задачу прогоном по каскаду из 5 отдельных правил замены - изврат конечно, но иных вариантов пока не нашел.
Сообщить модератору   Записан
animalia
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 6


« Ответ #3 : 01 Июнь 2016, 18:46:18 »

Нашелся еще один маленький баг (столь мелкий, что отдельной ветки не заслуживает)
В тренажере во всех TMemo не работает комбинация Ctrl+A. В TEdit все ОК, из контекстного меню все тоже работает.
Мелочь, но напрягает: приходится или мышь дергать, или с зажатым Del медитировать.
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +213/-4
Offline Offline

Сообщений: 6157


« Ответ #4 : 06 Июнь 2016, 18:21:14 »

по идее должен вернуть один единственный символ - /
Не должен. Строка замены парсится ДО выполнения регулярного выражения. Пара символов \1 рассматривается как эта пара символов, а не результат выполнения регулярного выражения. Поэтому писать в колонку Замена \x\1 не имеет смысла. Можно писать, например, \x2F.
Запись \x\1, конечно, не должна приводить к зависанию программы, это я исправлю.
Цитировать
В тренажере во всех TMemo не работает комбинация Ctrl+A.
TMemo - стандартная компонента, вот такой ее сделали. Я применять Ctrl+A не запрещал. Можно выделить строки стрелками с зажатым Shift.
Сообщить модератору   Записан
animalia
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 6


« Ответ #5 : 06 Июнь 2016, 19:15:59 »

Цитировать
Строка замены парсится ДО выполнения регулярного выражения.
Не знал, учту на будущее.
Цитировать
TMemo - стандартная компонента
А вот это знаю. Уже сколько версий Delphi это наследие с Ctrl+A тянется.
Просто такое не дружелюбное поведение "лечится" установкой PopupMenu и ActionList с набором стандартных действий. С другой стороны понимаю, что правило "работает - не трогай" никто не отменял. Улыбка
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +213/-4
Offline Offline

Сообщений: 6157


« Ответ #6 : 13 Июнь 2016, 15:02:44 »

Просто такое не дружелюбное поведение "лечится" установкой PopupMenu и ActionList с набором стандартных действий.
Лечится. Но я же не текстовый редактор пишу, где такая функция была бы одной из самых востребованных. Данная "проблема", наверное даже не второстепенная, а третьестепенная. Можно, конечно, погрузиться в борьбу с такими неидеальностями, но тогда что-то более важное в моем контексте останется без внимания.
Сообщить модератору   Записан
Страниц: [1]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: