Сайт восстановлен из веб архива. Сейчас он доступен только для чтения, скачивание материалов также недоступно. Если у вас до сих пор есть какие-то вопросы по разработке серверов CRMP, вы можете перейти на актуальный портал: https://pawno-rus.com

Перейти к содержимому

Уважаемый гость, если у Вас возникли проблемы с регистрацией, просьба обратиться в тех.поддержку или на почту admin@pawno-crmp.ru

Для полного доступа ко всем функциям форума, Вам необходимо зарегистрироваться и авторизоваться.

Фотография

Крашит сервер через диалоги


Лучший Ответ Elrmrnt-Kritik , 07 Май 2017 - 19:40

Vadlmok, нет... Тогда нужно ноль возвратить, если происходит ошибка (найден % в тексте) и единицу, если все успешно. А также передавать не количество символов, а саму строку.

 
stock anticrashdialog(inputtext[])//Поскольку мы передаем строку, inputtext принимает строковое значение, а значит нужно добавить []
{
	for(new i = strlen(inputtext); i != 0; --i)
	{
		switch(inputtext[i])
		{
			case %: return false;//происходит ошибка, возвращаем ноль
			default: continue;
		}
	}
	return true;//возвращаем 1
}

И в диалоге использовать так:

 
if(anticrashdialog(strlen(inputtext)) == 0) return SendClientMessage(playerid, 0xFF0000FF, "Недопустимые символы найдены в вашем тексте...");

 

Я что-то сейчас задумался (забыл), можно ли использовать case %. Возможно, понадобятся кавычки (case '%')

Можно обойтись компромиссным вариантом:

 
stock anticrashdialog(inputtext[])//В сток мы передаем строку, поэтому принимает значение строковое, а значит нужно добавить []
{
	if(strfind(inputtext, "%", true) >= 0) return false;//Ошибка, в строке найден знак процента
	return true;//возвращаем 1, если ничего не найдено
}

И в диалоге использовать:

 
if(anticrashdialog(inputtext) == 0) return SendClientMessage(playerid, 0xFF0000FF, "Недопустимые символы найдены в вашем тексте...");

Коротко говоря, в первом методе мы в сток передавали строку и там при помощи цикла перебирали каждый символ. Если он сходится с %, тогда возвращали 0 (то есть ошибку). Вторым же методом мы во всей строке искали %. Опять же, если ошибка, возвращаем ноль. Не знаю какой из них со стороны оптимизации будет лучше. Я бы выбрал первый...

Перейти к сообщению »


  • Закрытая тема Тема закрыта
Сообщений в теме: 3

#1
offline   Vadlmok

Vadlmok
  • 3
    • Сообщений: 40
    • Регистрация: 14.01.16

Добрый день.
Возник вопрос, как защитить сервер от краша с помощью ввода в диалог %s и т.д.
Спасибо за ответ.


Elrmrnt-Kritik (07 Май 2017 - 13:09):
Перенес в "Другие темы по PAWN/GTA:CR".

  • 0

#2
offline   Elrmrnt-Kritik

Elrmrnt-Kritik
  • 777
    • Сообщений: 3 181
    • Регистрация: 19.07.15

Vadlmok, не знаю, когда именно вызывается краш, но как вариант, через switch проверьте, нет ли знака % в введенном тексте. Например,

покажем диалог пользователю:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

И в OnDialogResponse:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.


  • 0

#3
offline   Vadlmok

Vadlmok
  • 3
    • Сообщений: 40
    • Регистрация: 14.01.16

Elrmrnt-Kritik, а если сделать так? Будет работать?

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.


Сообщение отредактировал Vadlmok: 07 Май 2017 - 13:17

  • 0

#4
offline   Elrmrnt-Kritik

Elrmrnt-Kritik
  • 777
    • Сообщений: 3 181
    • Регистрация: 19.07.15
✓  Лучший Ответ

Vadlmok, нет... Тогда нужно ноль возвратить, если происходит ошибка (найден % в тексте) и единицу, если все успешно. А также передавать не количество символов, а саму строку.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

И в диалоге использовать так:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 

Я что-то сейчас задумался (забыл), можно ли использовать case %. Возможно, понадобятся кавычки (case '%')

Можно обойтись компромиссным вариантом:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

И в диалоге использовать:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Коротко говоря, в первом методе мы в сток передавали строку и там при помощи цикла перебирали каждый символ. Если он сходится с %, тогда возвращали 0 (то есть ошибку). Вторым же методом мы во всей строке искали %. Опять же, если ошибка, возвращаем ноль. Не знаю какой из них со стороны оптимизации будет лучше. Я бы выбрал первый...


Сообщение отредактировал Elrmrnt-Kritik: 07 Май 2017 - 19:48

  • 1


Количество пользователей, читающих эту тему: 1

0 пользователей, 0 гостей, 0 анонимных


    Alexa (1)