Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Отвергнутые патчи

Важная информация

Отвергнутые патчи Патчи, отвергнутые от приёма в GIT

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.06.2010, 10:39   #1
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию [patch/dev] crash in HandleSetActiveMoverOpcode

Вот недавно словил такой краш http://paste2.org/p/860715 . Я помню ещё как-то давно он был одним из самых частых крашей, видимо попытки hununza вправить его уменьшили его частоту, однако я его таки словил на ревизии 10011

В общем мои первые потуги его исправить окончательно. Т.к. мы незнаем откуда корень краша, пока предлагаю затык.
Написал два варианта.
1
Код:
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp
index d81bb8a..765cd2f 100644
--- a/src/game/MovementHandler.cpp
+++ b/src/game/MovementHandler.cpp
@@ -778,6 +778,12 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recv_data)
     uint64 guid;
     recv_data >> guid;
 
+    if(!_player || !guid)
+    {
+        sLog.outError("Prevented crash with HandleSetActiveMoverOpcode");
+        return;
+    }
+
     if(_player->m_mover->GetGUID() != guid)
     {
         sLog.outError("HandleSetActiveMoverOpcode: incorrect mover guid: mover is " I64FMT " and should be " I64FMT, _player->m_mover->GetGUID(), guid);
2
Код:
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp
index d81bb8a..765cd2f 100644
--- a/src/game/MovementHandler.cpp
+++ b/src/game/MovementHandler.cpp
@@ -778,6 +778,12 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recv_data)
     uint64 guid;
     recv_data >> guid;
 
+    if(!_player->m_mover->GetGUID() || !guid)
+    {
+        sLog.outError("Prevented crash with HandleSetActiveMoverOpcode");
+        return;
+    }
+
     if(_player->m_mover->GetGUID() != guid)
     {
         sLog.outError("HandleSetActiveMoverOpcode: incorrect mover guid: mover is " I64FMT " and should be " I64FMT, _player->m_mover->GetGUID(), guid);
Жду конструктивной критики

Последний раз редактировалось Insider42; 02.06.2010 в 10:44.
Insider42 вне форума   Ответить с цитированием
Старый 02.06.2010, 10:55   #2
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

А оно точно не от античита? Мне наводку на правку похожего краша Wowka321 дал, оно из-за миндконтрола и дальновидения хантов вылетало. Там действительно проблемы в определении mover/m_mover были.
rsa вне форума   Ответить с цитированием
Старый 02.06.2010, 11:02   #3
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Эта функция совершенно бесполезна в текущей версии.
Чтобы не падал в HandleSetActiveMoverOpcode тело функции заменяем на:
Код:
recv_data.read_skip<uint64>();
Но все равно будет падать из-за неверного мувера в разных местах.

У меня такая версия:

PHP код:
void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recv_data)
{
    
DEBUG_LOG("WORLD: Recvd CMSG_SET_ACTIVE_MOVER");
 
    
uint64 guid;
    
recv_data >> guid;

    if (
Unit *mover ObjectAccessor::GetUnit(*_playerguid))
        
_player->SetMover(mover);
    else
        
_player->SetMover(NULL);

(подглядел в TC). На HandleSetActiveMoverOpcode и HandleMovementOpcodes больше не падает.

Последний раз редактировалось zergtmn; 17.06.2010 в 12:36.
zergtmn вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Insider42 (02.06.2010)
Старый 02.06.2010, 11:05   #4
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от zergtmn Посмотреть сообщение
подглядел в TC
Раз в TC то неплохо бы и автора указать
Insider42 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Crash dump'ы под *nix CruncH Прочая документация 16 21.08.2010 11:09
Crash с инстами ice74 Баг-репорты 12 20.05.2010 12:11
[Crash?] удаление GO zergtmn Баг-репорты 0 29.04.2010 22:31
[crash] EffectScriptEffect Insider42 Баг-репорты 8 23.04.2010 12:49
Crash(game_event) selector Баг-репорты 9 19.04.2010 19:41


Текущее время: 05:02. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot