Ошибки из-за ужесточения проверки UTF-8 в строках

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Smitis »

Latest post of the previous page:

Shmuel,
Да, спасибо, string.match работает. Вызывает беспокойство, что теперь обычная строка так вот запросто может перестать быть валидной...
Разум когда-нибудь победит.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

Smitis wrote: Sat 11 Apr, 2020 14:40 Вызывает беспокойство, что теперь обычная строка так вот запросто может перестать быть валидной...
На самом деле это не совсем обычная строка, это бинарный гуид. Посмотрите на эту строку "через" far.Show().
Но кроме бинарных строк ещё много какие не являются UTF-8, например русский текст в однобайтовых кодировках.

Давайте немного поживём с этим, а там видно будет, может быть уберём эту проверку на валидность (хотя на моей системе пока ничего не вылезло) :)
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Smitis »

Shmuel,
Да, теперь понял. Там проверка первый раз проходила нормально, падение на второй проверке, когда гуид уже бинарный. Случай достаточно специфический.
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h »

Shmuel wrote: Sat 11 Apr, 2020 14:46 Давайте немного поживём с этим, а там видно будет, может быть уберём эту проверку на валидность (хотя на моей системе пока ничего не вылезло)
Убрал из макросов все указанные win.Uuid-ы - вылетать при старте перестало. НО!
Пытаюсь открыть некий текстовый файл. Он в UTF-8. В результате Colorer падает и обрушивает ФАР.
В настройках колорера тоже есть файл в ANSI-кодировке. В результате пи попытке вызвать настройку (хотя бы чтоб выключить колорер!) последний падает и валит ФАР.
В тему колорера я всё это описал, но, думаю, эту проверку на валидность надо убирать всенепременно.
Last edited by buniak_a_h on Sun 12 Apr, 2020 00:48, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by zg »

buniak_a_h wrote: Sun 12 Apr, 2020 00:47В тему колорера я всё это описал, но, думаю, эту проверку на валидность надо убирать всенепременно.
а какая связь между падениями колорера и проверкой валидности строк в луамакро?
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h »

zg wrote: Sun 12 Apr, 2020 01:00 а какая связь между падениями колорера и проверкой валидности строк в луамакро?
Падает в версии 5580; в версии 5579 - нет. В новостях написано только:
1. Изменён формат флагов фильтров в базе данных (задел на будущее - хранить блобы было не самой лучшей идеей). В целях совместимости пока поддерживается чтение старого формата.
Shmuel добавил к этой новости, что заменили библиотеку
Shmuel wrote: Sat 11 Apr, 2020 13:48 обновилась библиотека luautf8, очевидно новая версия более тщательно проверяет строки на валидность UTF-8.
Если имеется два изменения, про одно написано, что в нём обеспечена совместимость, а в другом - нет, но вновь появившиеся вылеты однозначно следствие второго изменения. Ну, или есть другие, о которых авторы умолчали. Не хочется об этом думать …
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by citRiks »

.. у меня постоянно в 5591 такое вылазит.
Задисэйблить StackTracePlus не помогло
Last edited by Guest on Thu 30 Apr, 2020 11:56, edited 1 time in total.
Reason: Добавлена ссылка на исходную тему
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Глюки и баги, появившиеся в «ночных сборках»

Post by LAT »

Попробуйте убрать _macroinit.lua - тогда выскакивает более полезное окно с ошибкой. И, скорее всего, проблема связана с win.Uuid.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Глюки и баги, появившиеся в «ночных сборках»

Post by citRiks »

LAT,
Круто! все таки есть
Смешное вот что, я уже понял что проблема где-то в контент-колумне который у меня был.
если я его дисайблю таким способом:

Code: Select all

GetContentFields = function(col_set, param2)
	if true then return false end
.. то ошибки нет, возвращаю - ошибка есть.
и я его всего излазил уже вдоль и поперек, но бестолку.
Так вот что оказалось, убрал "_макроинит" по твоему совету,
(кстати обьяснишь может заодно, при чем тут макроинит? это я так и не понял..)
.. и сообщение показало да, на контент колумн, только на другой контент колумн.
привожу этот код который глючит (починен мною), этот код взят из хелпа(справки) как пример:

Мораль сей басни - теперь нужно все строковые :something(..) заменять на string.something(..) что ли?

PS
Если опять чего нарушил - уж прастити если можити
Last edited by citRiks on Thu 30 Apr, 2020 11:24, edited 1 time in total.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

citRiks wrote: Thu 30 Apr, 2020 11:22

Code: Select all

--было: --s = s:gsub("%s+", " "):match("[%w_].*")
Да, это ошибка в примере, ибо операции, рассчитанные на обработку UTF-8, здесь производятся на куске произвольного, возможно не-текстового файла.
Данная ошибка не требует других исправлений, кроме мануала. Что же касается вашей исходной ошибки (error in error handling) - это более серьёзно, но без воспроизводимого примера сделать ничего нельзя.
citRiks wrote: Thu 30 Apr, 2020 11:22 Мораль сей басни - теперь нужно все строковые :something(..) заменять на string.something(..) что ли?
Нет. Просто не надо вызывать UTF-8 функции на произвольных строках.
Last edited by Shmuel on Thu 30 Apr, 2020 11:54, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by citRiks »

Shmuel wrote: Thu 30 Apr, 2020 11:52 Что же касается вашей исходной ошибки (error in error handling) - это более серьёзно, но без воспроизводимого примера сделать ничего нельзя.
Оказалось что все-таки StackTracePlus, просто для воспроизведеника надо совсем перезгружаться,
а не только макросы.
Лечиться опять же заменой :gsub(..) на string.gsub(..) в _macroinit.lua:

Code: Select all

local STP = require("StackTracePlus")
if STP then debug.traceback = function(...) return string.gsub(STP.stacktrace(...), "\r\n", "\n") end end
Кто тут виноват, STP или ..?
Это уже замороженное поведение?
написать в тему про StackTracePlus?

Ну в общем это и есть как воспроизвести в 5591, в макроинит ставим:

Code: Select all

local STP = require("StackTracePlus")
if STP then debug.traceback = function(...) return STP.stacktrace(...):gsub("\r\n", "\n") end end
В scripts ставим ваш пример контент колумна (неисправленный)
Last edited by citRiks on Thu 30 Apr, 2020 12:54, edited 1 time in total.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by Shmuel »

citRiks, по этому описанию всё ясно, даже не надо воспроизводить.
Поведение ожидаемое - заменена стандартная ф-ция debug.traceback, и в неё, несчастную, заменённую, вставлен код вызывающий ошибку.
Так что всё правильно - ошибка при обработке ошибки.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

Shmuel wrote: Thu 30 Apr, 2020 11:52 не надо вызывать UTF-8 функции на произвольных строках.
Это кошмар, что Вы наделали в версии 5580! Ну как я узнаю без проверки, правильная UTF-8 строка сия последовательность байтов, или нет! Раньше же как-то работало, может и не строго, зато правильно («правильной называется программа, работающая в соответствии ожиданием удовлетворительное время»©Вирт, "Основы структурного программирования") :-) Т.е., я могу узнать, но переписывать ВСЕ вызовы вида строка:функция-utf8() на то же, но с проверкой - ну, чего говорить, сами понимаете, что это - нонсенс.
Пришлось даже вносить изменения в поставляемый LuaMacro.lua, заменяя строка:gsub на string.gsub(строка). Причём, строка - это возврат функции debug.traceback - с какого перепуга эта строка стала некорректной UTF-8-строкой ???
Shmuel, Вы писали где-то, что если это приведёт к неудобствам, то придётся вернуть. По-моему (и не только) - пора уже.
Shmuel wrote: Sat 11 Apr, 2020 14:46 Давайте немного поживём с этим, а там видно будет, может быть уберём эту проверку на валидность (хотя на моей системе пока ничего не вылезло)
Last edited by buniak_a_h on Thu 30 Apr, 2020 13:37, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by citRiks »

Shmuel wrote: Thu 30 Apr, 2020 13:02 ставлен код вызывающий ошибку.
Так что всё правильно - ошибка при обработке ошибки.
Ну однако все еще непонятна магия замены переменная:чтото(..) на строка.чтото(..)
"перемeнная:чтото(..)" это всегда УТФ8, а "строка.чтото(..)" это всегда АСКИ?

ну и непонятно в чем стал неправ вполне уважаемый STP (https://github.com/ignacio/StackTracePlus),
он получает, как и сказал предыдущий оратор строки от хука на ошибку исполнения,
и не ожидает подвоха.

С другой стороны, если это лечится заменой двоеточие:чтото(..) на точка.чтото(...),
то надо так и сказать, а не говорить что это код стал неправильный,
который слава богу с десятилетней версии 5.1. никуда не ушел

Но, давайте подумаем, вот сейчас в ФАРе падает то что в других Луа-средах не падает.
А я хочу взять например модуль который мне делает МД5 например, XML, чего еще.
И все эти модуля теперь не будут работать в ФАРе.
Потому что в ФАРе ужесточили УТФ8.
Так ли разумно ли это?
В чем мотивация ужесточать УТФ8 можно ли поинтересоваться?
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by Shmuel »

buniak_a_h wrote: Thu 30 Apr, 2020 13:27 Пришлось даже вносить изменения в поставляемый LuaMacro.lua, заменяя строка:gsub на string.gsub(строка)
Это интересно. Нельзя ли указать точное место вашего изменения?
buniak_a_h wrote: Thu 30 Apr, 2020 13:27 Вы писали где-то, что если это приведёт к неудобствам, то придётся вернуть. По-моему (и не только) - пора уже.
Я не исключаю возврата, просто пока не убеждён, что возврат нужен. У меня постоянно загружены более десятка LuaFAR-плагинов плюс куча макросов (на 90% моих), и проблем вроде не испытываю.
citRiks wrote: Thu 30 Apr, 2020 13:44 В чем мотивация ужесточать УТФ8 можно ли поинтересоваться?
Никакой мотивации у меня изначально не было. Просто было произведено обновление библиотеки luautf8 с релиза 0.1.1 2015 года на релиз 0.1.2 2020 года.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by zg »

buniak_a_h wrote: Thu 30 Apr, 2020 13:27Это кошмар, что Вы наделали в версии 5580!
а можно поспокойнее? если я правильно помню, это вы жаловались, что find возвращает позиции в байтах. для вас сделали в символах. мне этот переход много чего сломал, но я не помню хоть одно сообщения от моего имени на форуме в стиле, всё плохо — верните как было. теперь библиотека, которую добавили из-за вас хочет для работы с utf8 как ни странно utf8. это офигеть как неожиданно, да? я например только рад, что потенциальные косяки в моём коде вылезут раньше, чем могли бы. отказываться от этого — плохое решение.
Post Reply

Return to “Обсуждение макросов”