Известные проблемы - gogafefe/StAlGoLM GitHub Wiki

Известные проблемы

Исправлено

Разделитель сообщения не распознавался, если приходил слитно с текстом команды

  • Где: mytcpserver.cpp, slotServerRead()
  • Проявление: авторизация с верным логином и паролем иногда отклонялась (auth-), хотя данные были верными
  • Причина: код проверял array == "\x01" — то есть требовал, чтобы разделитель конца сообщения пришёл отдельным, самостоятельным чтением из сокета. На практике (особенно на localhost) текст команды и разделитель почти всегда приходят слитно за одно чтение, и байт 0x01 оставался приклеенным к последнему аргументу команды. Для auth последний аргумент — пароль, поэтому его хэш не совпадал с сохранённым.
  • Исправление: разделитель теперь ищется через indexOf('\x01') внутри пришедших байт, а не сравнивается с ними целиком. Добавлен буфер QMap<long, QByteArray> mBuffers на каждого клиента — на случай, если сообщение придёт по частям в нескольких чтениях.
  • Подробности и протокол проверки: V_test_case_task2.xlsx, лист «Дефект 1»

Статистика нового задания не сохранялась — про неё забыли в четырёх местах

  • Где: databasemanager.cpp, server_functions.cpp
  • Проявление: ответы на задание проверялись правильно, но значения в его таблице статистики всегда оставались нулями; mystats показывал нули даже после ответов
  • Причина: в черновой версии задание жило под отдельным номером (5-я таблица статистики), и при его добавлении не обновили четыре места, которые работают с таблицами статистики:
    1. createStatisticRows() заводила пользователю строку статистики только в старых таблицах — в новой строки не было, и UPDATE ... WHERE login молча не находил, что обновлять;
    2. getStatisticRow() возвращала нули для новой таблицы;
    3. deleteStatisticRows() не чистила её при удалении аккаунта;
    4. cmd_mystats() не показывала статистику этого задания.
  • Исправление: задание перенесено на место заглушки Task2 (все операции со статистикой уже покрывают таблицы 1–4), а вывод cmd_mystats учитывает, что в Task2 десять шаблонов (10 ячеек), а в остальных — по 40.
  • Проверка: reg → auth → task2 → верный и неверный ответ → mystats 2 показывает ненулевые значения (1:1 2:-1); математика задания покрыта модульным тестом в tests/.

Не наши, но замечены в Тесты.xlsx (для сведения, не проверялось повторно)

  • Пароль при входе нечувствителен к регистру (auth lol LOL проходит) — отмечено как критический баг
  • При ответе на задание состояние сессии иногда прерывается без явной причины
  • Команда users показывает дату/время регистрации, не совпадающие с системными