• Чиним голдед

    From Nil A@2:5015/46 to Stas Mishchenkov on Wed Mar 4 17:53:34 2026
    *** Answering a message in area nino.046.local (ио /46 Локалка).

    Hello, Stas!

    Wednesday March 04 2026 17:12, from Stas Mishchenkov -> Nil A:

    Собрал под линухом. Погонял деда по fidouserno. Работает, как
    часы. Можно засылать Веталю.
    Окей, отписал.

    Пока нечего больше чинить в голдеде, кроме юникода?
    а самом деле глюков хватает. Взять хотя бы переколбашивание ююков при сохранении сообщения, если в начале попадается [A-Z]{1,5}>

    Давай чуть поподробнее, как воспроизвести, какие действия в деде надо произвести.

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Gemini can make mistakes, so double-check it (2:5015/46)
  • From Stas Mishchenkov@2:460/5858 to Nil A on Thu Mar 5 00:07:54 2026
    Hi Nil!

    04 Mar 26 17:53, Nil A -> Stas Mishchenkov:

    Пока нечего больше чинить в голдеде, кроме юникода?
    а самом деле глюков хватает. Взять хотя бы переколбашивание ююков
    при
    сохранении сообщения, если в начале попадается [A-Z]{1,5}>

    Давай чуть поподробнее, как воспроизвести, какие действия в деде надо произвести.

    Глюк возникает именно при сохранении сообщения. еводится дед на определённую последовательность символов. Где-то даже в факе пробегало, но я не нашёл.

    ──────────────────────────────────────────────────────────────────────────────
    EchoArea: RU.GOLDED Date: 29.01.2020
    From: Stas Mishchenkov 2:460/5858
    To : Max Vasilyev
    Subj: hpt/w64 ────────────────────────────────────────────────────────────────────────────── @MSGID: 2:460/5858 5e314637

    * Оригинал написан в RU.HUSKY
    * Скопировано в RU.GOLDED

    *** Ответ на сообщение из _Carbon.Mail (Carbon.Mail).

    Hi, Max!

    28 янв 20 20:48, Max Vasilyev -> Stas Mishchenkov:

    Точно. Битый файл получается. Очень похоже, что это глюк деда.

    У меня ged/w32 все нормально разъююкал.

    Было замечено, что если в теле письма есть определенная последовательность символов, похожая на ююк, то при сохранении письма он его перекодирует по-своему, причем это перестает быть валидным ююком. Я предположил, что подобное происходит и при сохранении письма в файл.
    Получается вот так:

    === Import Windows Clipboard Start === MMOI/$[!8YCG$]""(G,(TAF6#;1.@$B<%RP8PZ1J`X%%1T^V72DN:Z!N](#J) M)>:FM6DX&!A+0FQ8S'70SN:,&6^!H$9'F)0@DL-1P$"'0H<+3Q158<ZF*NV< H`59)EK#I*`,X6FTUE:2:N8FJYD3*TJUO(-QN31U5J:3[.`ZK]L7@,>!*: MLF<"0-@?&0N+H]'9@L)+)6$2Q45+3@T??6.F]]/)8+%U!;A35LN2M-G<)^2;
    === Import Windows Clipboard End ===

    Пробел в конце второй строчки и перекодированная третья строка.
    Сам файл, который был заююкан: https://brorabbit.g0x.ru/uue/scorpions_blackout.mp3

    Причем, для выявления глюка не обязателен весь ююк, достаточно этих строк.

    Have nice nights.
    Stas Mishchenkov.

    -+- Хороший собеседник не только внимательно слушает, но и вовремя наливает.
    + Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858) ──────────────────────────────────────────────────────────────────────────────

    ──────────────────────────────────────────────────────────────────────────────
    EchoArea: RU.GOLDED Date: 31.01.2020
    From: Eugene Palenock 2:5020/2065
    To : Stas Mishchenkov
    Subj: hpt/w64 ────────────────────────────────────────────────────────────────────────────── @MSGID: 2:5020/2065@FidoNet 5e34603c

    Привет, Stas!

    29 янв 20 11:32, Stas Mishchenkov -> Max Vasilyev:

    Пробел в конце второй строчки и перекодированная третья строка.
    Сам файл, который был заююкан: https://brorabbit.g0x.ru/uue/scorpions_blackout.mp3

    У меня тоже баг. GoldED+/W32-MSVC 1.1.5-b20180707
    Заююкал - разююкал - файл не совпадает с оригиналом...


    --
    С уважением, Евгений.

    ---
    + Origin: ... (2:5020/2065) ──────────────────────────────────────────────────────────────────────────────

    Have nice nights.
    Stas Mishchenkov.

    --- Первым признаком глупости является полное отсутствие стыда. З.Фрейд.
    * Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858)
  • From Nil A@2:5015/46 to Stas Mishchenkov on Thu Mar 5 03:22:22 2026
    Hello, Stas!

    Thursday March 05 2026 00:07, from Stas Mishchenkov -> Nil A:

    а самом деле глюков хватает. Взять хотя бы переколбашивание
    ююков при сохранении сообщения, если в начале попадается
    [A-Z]{1,5}>

    Глюк возникает именно при сохранении сообщения. еводится дед на определённую последовательность символов. Где-то даже в факе
    пробегало, но я не нашёл.
    ...
    Пробел в конце второй строчки и перекодированная третья строка.
    Сам файл, который был заююкан: https://brorabbit.g0x.ru/uue/scorpions_blackout.mp3

    Хорошо что ты дал исходный файл, который я прогнал через uuencode, получил те 4 строчки, и воспроизвёл баг. Иначе мы бы искали альтернативные пути передать те самые 4 строчки ;-)

    Я провёл несколько тестов:

    a1. Создал новое сообщение, импортировал файл с этими 4 строками, отправил.
    a2. Вставил эти 4 строки в терминал GoldEd.
    a3. Использовал внешний редактор и вставил туда эти 4 строки.
    Каждый раз в базу сообщение попадало покорёженное, в 3 строчки, вторая длинная получалась.

    b1. Отправил сообщение с этими 4 строками с помощью txt2pkt, убедился, что в базу попало в правильном виде. Открыл сообщение в GoldEd, и оно отобразилось в 3 строчки также.
    b2. Сохранил это сообщение bp GoldEd в файл, и получившийся файл покорёженным как у тебя в 4 строчки.

    Буду с помощью ИИ чинить. о видишь подход, я протестировал разный вход/выход у голдеда, чтобы у кодинг-агента была инфа что чинить ;-)

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Gemini can make mistakes, so double-check it (2:5015/46)
  • From Nil A@2:5015/46 to Stas Mishchenkov on Thu Mar 5 03:53:08 2026
    Hello, Stas!

    Thursday March 05 2026 03:22, from Nil A -> Stas Mishchenkov:

    Глюк возникает именно при сохранении сообщения. еводится дед на
    определённую последовательность символов.

    Буду с помощью ИИ чинить. о видишь подход, я протестировал разный вход/выход у голдеда, чтобы у кодинг-агента была инфа что чинить ;-)

    #### Анализ первопричины
    Порча данных вызвана тем, что Внутренний Редактор (IE) и Процессор Сообщений неправильно интерпретируют данные, закодированные в UUE, как цитаты сообщений. Это приводит к применению некорректной логики переноса строк и объединения к бинарным данным.

    1. **Ошибочное определение цитаты (`golded3/geutil.cpp`)**:
    - Функция: `is_quote(const char* ptr)`
    - Логика: Сканирует первые 11 символов строки. Если находит символ цитаты (по умолчанию `>`) после некоторых "инициалов" (любые символы, не входящие в `Quotestops` или пробелы), возвращает `true`.
    - Срабатывание: Корректные UUE-строки часто начинаются с символа длины (например, `M`) и могут содержать символ `>` в первых позициях (например, `M)>:FM...`). Это приводит к тому, что строка помечается как `GLINE_QUOT`.

    2. **Агрессивное объединение абзацев (`golded3/geline.cpp`)**:
    - Функция: `MakeLineIndex(...)`
    - Логика: При обработке текста сообщения ищет последовательные строки с одинаковым префиксом цитаты. Если у двух строк совпадают префиксы (определяется через `GetQuotestr` и `cmp_quotes`), они "разворачиваются" и объединяются в одну строку, часто с добавлением пробела между ними.
    - Срабатывание: Поскольку несколько UUE-строк часто начинаются с одного и того же символа длины (например, `M`) и могут случайно иметь похожий "цитатный" паттерн, GoldEd+ объединяет их. Это удаляет "цитату" (на самом деле данные UUE) с начала второй строки и вставляет пробел, что приводит к порче UUE-потока.

    3. **Логика переноса редактора (`golded3/geedit.cpp`)**:
    - Функция: `IEclass::wrapit(...)`
    - Логика: Аналогично `MakeLineIndex`, логика переноса редактора в реальном времени использует `GetQuotestr` для сохранения префиксов цитаты. Если строка ошибочно определяется как цитата, редактор пытается перенести её с сохранением префикса. Если данные UUE ошибочно интерпретируются, точки переноса вычисляются неверно, а префиксы дублируются или удаляются.

    #### Затронутые файлы и функции
    - **`golded3/geutil.cpp`**:
    - `is_quote(const char* ptr)`: Основной источник ошибочной идентификации. Просмотр на 11 символов вперёд для поиска `>` слишком широк для бинарного текста.
    - `is_quote2(Line* line, const char* ptr)`: Вторичная эвристика, не исключающая UUE-данные.
    - `GetQuotestr(const char* ptr, char* qbuf, uint* qlen)`: еправильно извлекает данные UUE как строку цитаты.

    - **`golded3/geline.cpp`**:
    - `MakeLineIndex(...)`: Главный цикл преобразования исходного текста сообщения в отображаемые строки. Содержит логику объединения "развернутых" строк.

    - **`golded3/geedit.cpp`**:
    - `IEclass::wrapit(...)`: Отвечает за перенос строк в реальном времени при редактировании/вставке.
    - `IEclass::setlinetype(Line* __line)`: Присваивает строкам тип `GLINE_QUOT`, что запускает ошибочную логику далее по цепочке.

    #### Предлагаемое решение
    адёжное исправление требует различать данные UUE и настоящие цитаты.

    1. **овая эвристика: `is_uue_line(const char* line)`**:
    - Реализовать функцию для проверки, является ли строка, вероятно, UUE-данными.
    - Проверка 1: ачинается с символа в диапазоне ASCII 33 ('!') до 96 ('`').
    - Проверка 2: Длина строки соответствует ожидаемой, определяемой первым символом (Длина = `(char - 32)`). Для стандартной 45-байтовой строки первый символ ? `M` (77), а закодированная длина ? 60 символов.
    - Проверка 3: Все символы находятся в допустимом наборе UUE (ASCII 32 до 96).

    2. **Интеграция проверки**:
    - Обновить `is_quote` и `is_quote2`, чтобы они немедленно возвращали `false`, если `is_uue_line` возвращает `true`.
    - Обновить `setlinetype`, чтобы UUE-строки помечались как `GLINE_HARD` (чтобы предотвратить объединение) и никогда как `GLINE_QUOT`.
    - Убедиться, что `MakeLineIndex` и `wrapit` уважают эти границы и не пытаются "разворачивать" строки, похожие на UUE.

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Gemini can make mistakes, so double-check it (2:5015/46)
  • From Stas Mishchenkov@2:460/5858 to Nil A on Thu Mar 5 06:02:22 2026
    Hi Nil!

    05 Mar 26 03:22, Nil A -> Stas Mishchenkov:

    Глюк возникает именно при сохранении сообщения. еводится дед на
    определённую последовательность символов. Где-то даже в факе
    пробегало, но я не нашёл.

    ...

    Пробел в конце второй строчки и перекодированная третья строка.
    Сам файл, который был заююкан:
    https://brorabbit.g0x.ru/uue/scorpions_blackout.mp3

    Хорошо что ты дал исходный файл, который я прогнал через uuencode, получил те 4 строчки, и воспроизвёл баг. Иначе мы бы искали альтернативные пути передать те самые 4 строчки ;-)

    Я провёл несколько тестов:

    a1. Создал новое сообщение, импортировал файл с этими 4 строками, отправил. a2. Вставил эти 4 строки в терминал GoldEd. a3. Использовал внешний редактор и вставил туда эти 4 строки. Каждый раз в базу сообщение попадало покорёженное, в 3 строчки, вторая длинная получалась.

    b1. Отправил сообщение с этими 4 строками с помощью txt2pkt, убедился, что в базу попало в правильном виде. Открыл сообщение в GoldEd, и оно отобразилось в 3 строчки также. b2. Сохранил это сообщение bp GoldEd в файл, и получившийся файл покорёженным как у тебя в 4 строчки.

    Буду с помощью ИИ чинить. о видишь подход, я протестировал разный вход/выход у голдеда, чтобы у кодинг-агента была инфа что чинить ;-)

    Я всё это тоже проделал шесть лет назад, когда наткнулся на этот глюк. Потому и пишу, что при сохранении корёжит. Оказалось, что глюк давно известный, но ни кто не удосужился починить. А оно иногда прям бесит.

    Have nice nights.
    Stas Mishchenkov.

    --- Не так страшен чёрт, как тот, кто его видит.
    * Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858)