Skip to main content

Конференции

Просмотр конференции fido7.ru.fidonet.today:

Предыдущее Следующее

Дата: 11 Nov 2019, 23:14:10
От: Rinat H. Sadretdinow @ 2:5020/620.0
Кому: Evgeniy
Тема: T-Mail IP


Hello Evgeniy!

11 Nov 19 22:00, you wrote to me:

 RHS>> Там слово сравнивается или байт? Если байт, то может не на 0x7D
 RHS>> заменить, а на 0x73? Чтобы беззнаковое сравнение было. Хотя
 RHS>> разницы при значении 80 в принципе никакой, но на всякий случай?

 Ev> Сравнивается слово, вот код этого места:

[...]

Это место я нашёл уже. Hо я смотрел видать другую версию tmailnt.exe потому что адреса у меня чуть другие.

Hемного лучше выглядит после Hex-Rays (я обозвал эту проблемную функцию CheckConsoleSize, она вызывается в двух местах и везде если возвращает -1 то "Error: unable to initialize video system"):

~~~
signed int CheckConsoleSize()
{
  signed int result; // eax@3
  int consoleScreeenBuffer; // [sp+0h] [bp-18h]@2
  __int16 maximumWindowSize_Y; // [sp+12h] [bp-6h]@2
  __int16 maximumWindowSize_X; // [sp+14h] [bp-4h]@2

  if ( !hConsoleOutput )
    goto LABEL_11;
  GetConsoleScreenBufferInfo(hConsoleOutput, (PCONSOLE_SCREEN_BUFFER_INFO)&consoleScreeenBuffer);
  rows = maximumWindowSize_X;
  columns = maximumWindowSize_Y;
  lpConsoleBuffer_0 = (CHAR_INFO *)AllocConsoleBuffer(4 * maximumWindowSize_X * maximumWindowSize_Y);
  lpConsoleBuffer_1 = (int)lpConsoleBuffer_0;
  if ( columns != 80 )
    return -1;
  if ( columns > 132 )
    return -1;
  if ( rows < 25 )
    result = -1;
  else
LABEL_11:
    result = 0;
  return result;
}
~~~

Явно видна бага, после

if (columns != 80)

до

if (columns > 132)

просто не дойдёт никогда, так что да, по самой примитивной логике там должно быть

if (columns < 80)

а не

if (columns != 80)

PVS-Studio ошибки такого типа ловит на ура, но во времена написания T-Mail никакого PVS-Studio не существовало.

 Ev> А так - причин ошибки может быть несколько, какая из них не даёт
 Ev> работать под Win8? А Шива его знает... Без отладчика на конкретной
 Ev> системе гадать можно долго. Либо упатчиться в край. :-) Поэтому тут
 Ev> лишь предположения.

Если на семёрке сменить размер консоли и сделать не 80 столбцов, а больше, то и и на семёрке тоже перестаёт запускаться. Судя по всему у всех предшественников Windows 8 размер консоли by default был
80x25 и поэтому проблем не возникало, а у Windows 8 явно столбцов побольше будет.

 Ev> Единственное только, что при запуске с параметром "-NOCON" эта функция
 Ev> вообще не должна вызываться, поэтому та же ошибка не должна вылезать.
 Ev> Hо и интерфейса тоже, видимо, быть не должно...

Без интерфейса плохо.

Предлагаю создать ярлык для запуска именно T-Mail и в свойствах ярлыка принудительно установить ширину консоли в 80 столбцов. Тогда и запускаться должно, и tmailnt.exe патчить не придётся.

Bye!

--- GoldED+/LNX 1.1.5-b20170303
Origin: -= Thunder Bird =- (2:5020/620)

Предыдущее Следующее

К списку сообщений
К списку конференций