FWGS / xash3d

DEPRECATED in favor of https://github.com/FWGS/xash3d-fwgs. Only bugfixes are accepted.
https://xash.su
GNU General Public License v3.0
554 stars 107 forks source link

Начали зависать CS сервера #228

Closed the-swank closed 6 years ago

the-swank commented 7 years ago

Начали каждый день без причины зацикливатся сервера записывая в лог пока место на диске не закончится [16:40:44] Error: SetValueForKey: info string length exceeded Раньше это зависание было раз в ~4 месяца На серверах не чего совсем не делал, происходить это начало без какого либо вмешательства Вот что в логе перед зависанием:

ESC[0mESC[34m[16:23:08] ESC[0mCount res: 56
ESC[0mESC[34m[16:23:08] ESC[0mResList size: 607 bytes
ESC[0mESC[34m[16:23:10] ESC[0mESC[31mError:ESC[0m SetValueForKey: info string length exceeded

Также заметил идущие по 4-5 раз подряд ошибки связаные с переполнением WriteString, они были и раньше но сейчас стало кажется больше. Когда-то проверял плагины АМХ, не где переполнений не нашел, да и там всего парочка мест с использованием WriteString

the-swank commented 7 years ago

Все пересобрал и ушли зависания, во всяком случае за день — не единого. Я что-то не так сделал наверное, но странно очень ибо я вообще к файлам сервера не притрагивался и даже на сервер не заходил, а перед этим все более месяца нормально работало, а тут вдруг узнал что сервер завис. Хотя ошибки в логе что переполняется строка передаваемая в WriteString остались, незнаю откуда они, пересмотрел несколько раз места где я использую WriteString, не нашел переполнений.

the-swank commented 7 years ago

Выяснил причину. Происходит это при подключении игрока с заполненым до предела userinfo и одинаковым с другим игроком ником, при попытке инкрементации номера в нике "(n)", когда происходит вызов SetValueForKey для name происходит return false из-за переполнения буфера userinfo и не происходит смена ника, в итоге сервер зацикливается пытаясь установить ник с инкрементированым номером и строчит гигабайты логов с ошибками из-за невмещения ника в userinfo

a1batross commented 7 years ago

В этом случае менее приоритетные userinfo поля должны удаляться, пока не поместится.

Покажи пример.

11 авг. 2017 г. 2:58 ПП пользователь "Vitaly Karpenko" < notifications@github.com> написал:

Выяснил причину. Происходит это при подключении игрока с заполненым до предела userinfo и одинаковым с другим игроком ником, происходит это при попытке инкременации номера в нике"(n)", когда происходит вызов SetValueForKey для name происходит return false из-за переполнения буфера userinfo и не происходит смена ника, в итоге сервер зацикливается пытаясь установить ник с инкрементированым номером и строчит гигабайты логов с ошибками из-за невлизания ника в userinfo

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/FWGS/xash3d/issues/228#issuecomment-321762337, or mute the thread https://github.com/notifications/unsubscribe-auth/ADEJgUv6av_pmESzXnBHbePv1Y8fpeHHks5sXBeggaJpZM4LXMpJ .

the-swank commented 7 years ago

return происходит до удаления https://github.com/FWGS/xash3d/blob/0.19.x-interp/engine/common/infostring.c#L339