Показать сообщение отдельно

  #10  
Старый 20.07.2007, 11:46
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
С нами: 10994966

Репутация: 1332


По умолчанию

Цитата:
Код:
	do
	{
		int i=recv(sSock,cTemp,iSize,0);
		if(i<1)
			return iResult;
		iResult+=i;
		cTemp+=i;
		iSize-=i;
	}
	while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));
Переполнение буфера.
переполнение буфера всегда лечится, а вот неправильную логику подпрограммы исправлять обычно сложнее: кто сказал что браузер пошлет запрос оканчивающийся сразу на \r\n\r\n, тут и про пост-запросы сразу забываем с таким парсингом. наверное придется проверять пост-ли это, если да, тогда смотрим поле Content-Length и продолжаем читать после \r\n\r\n ровно такое количество данных.
и strstr тем же смотри у всего cBuf наличие \r\n\r\n, а не strncmp, так как данные могу поступать как угодно.
2KEZ ну и наверняка без наличия "Host: " будет идти чтение с не зарезервированного участка памяти, что к ошибке рантайм должно привести.
 
Ответить с цитированием