View | Details | Raw Unified | Return to bug 97408
Collapse All | Expand All

(-)file_not_specified_in_diff (-12 / +24 lines)
Line  Link Here
0
-- src/protocols/gg/common.c
0
++ src/protocols/gg/common.c
Lines 212-217 Link Here
212
{
212
{
213
	int ret;
213
	int ret;
214
214
215
	if (!buf || length < 0)
216
		return NULL;
217
215
	gg_debug(GG_DEBUG_FUNCTION, "** gg_read_line(...);\n");
218
	gg_debug(GG_DEBUG_FUNCTION, "** gg_read_line(...);\n");
216
	
219
	
217
	for (; length > 1; buf++, length--) {
220
	for (; length > 1; buf++, length--) {
Lines 269-275 Link Here
269
	const char *p, hex[] = "0123456789abcdef";
272
	const char *p, hex[] = "0123456789abcdef";
270
	char *q, *buf;
273
	char *q, *buf;
271
274
272
	int size = 0;
275
	unsigned int size = 0;
273
276
274
	if (!str)
277
	if (!str)
275
		str = "";
278
		str = "";
276
-- src/protocols/gg/libgg.c
279
++ src/protocols/gg/libgg.c
Lines 174-186 Link Here
174
 *
174
 *
175
 *  - sock - po³±czony socket.
175
 *  - sock - po³±czony socket.
176
 *
176
 *
177
 * je¶li wyst±pi³ b³±d, zwraca NULL. reszta w errno.
177
 * je¶li wyst±pi³ b³±d, zwraca NULL. reszta w errno. nale�y zwr�ci� uwag�, �e gdy
178
 * po��czenie jest nieblokuj�ce, a kod b��du wynosi EAGAIN, nie uda�o si�
179
 * odczyta� ca�ego pakietu i nie nale�y tego traktowa� jako b��d.
178
 */
180
 */
179
static void *gg_recv_packet(struct gg_session *sess)
181
static void *gg_recv_packet(struct gg_session *sess)
180
{
182
{
181
	struct gg_header h;
183
	struct gg_header h;
182
	char *buf = NULL;
184
	char *buf = NULL;
183
	int ret = 0, offset, size = 0;
185
	int ret = 0;
186
	unsigned int offset, size = 0;
184
	int sizeh = sizeof(struct gg_header);
187
	int sizeh = sizeof(struct gg_header);
185
188
186
	gg_debug(GG_DEBUG_FUNCTION, "** gg_recv_packet(...);\n");
189
	gg_debug(GG_DEBUG_FUNCTION, "** gg_recv_packet(...);\n");
Lines 209-215 Link Here
209
	}
212
	}
210
213
211
	/* jakie¶ sensowne limity na rozmiar pakietu */
214
	/* jakie¶ sensowne limity na rozmiar pakietu */
212
	if (h.length < 0 || h.length > 65535) {
215
	if (h.length > 65535) {
213
		gg_debug(GG_DEBUG_MISC, "-- invalid packet length (%d)\n", h.length);
216
		gg_debug(GG_DEBUG_MISC, "-- invalid packet length (%d)\n", h.length);
214
		errno = ERANGE;
217
		errno = ERANGE;
215
		return NULL;
218
		return NULL;
Lines 235-245 Link Here
235
	while (size > 0) {
238
	while (size > 0) {
236
		ret = read(sess->fd, buf + sizeh + offset, size);
239
		ret = read(sess->fd, buf + sizeh + offset, size);
237
		gg_debug(GG_DEBUG_MISC, "-- body recv(..., %d) = %d\n", size, ret);
240
		gg_debug(GG_DEBUG_MISC, "-- body recv(..., %d) = %d\n", size, ret);
241
		if (!ret) {
242
			gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() body recv() failed: connection broken\n");
243
			errno = ECONNRESET;
244
			return NULL;
245
		}
238
		if (ret > -1 && ret <= size) {
246
		if (ret > -1 && ret <= size) {
239
			offset += ret;
247
			offset += ret;
240
			size -= ret;
248
			size -= ret;
241
		} else if (ret == -1) {	
249
		} else if (ret == -1) {	
250
			int errno2 = errno;
251
242
			gg_debug(GG_DEBUG_MISC, "-- errno = %d (%s)\n", errno, strerror(errno));
252
			gg_debug(GG_DEBUG_MISC, "-- errno = %d (%s)\n", errno, strerror(errno));
253
			errno = errno2;
254
243
			if (errno == EAGAIN) {
255
			if (errno == EAGAIN) {
244
				gg_debug(GG_DEBUG_MISC, "-- %d bytes received, %d left\n", offset, size);
256
				gg_debug(GG_DEBUG_MISC, "-- %d bytes received, %d left\n", offset, size);
245
				sess->recv_buf = buf;
257
				sess->recv_buf = buf;
Lines 291-299 Link Here
291
{
303
{
292
	struct gg_header *h;
304
	struct gg_header *h;
293
	char *tmp;
305
	char *tmp;
294
	int tmp_length;
306
	unsigned int tmp_length;
295
	void *payload;
307
	void *payload;
296
	int payload_length;
308
	unsigned int payload_length;
297
	va_list ap;
309
	va_list ap;
298
	int res;
310
	int res;
299
311
Lines 317-327 Link Here
317
	while (payload) {
329
	while (payload) {
318
		char *tmp2;
330
		char *tmp2;
319
331
320
		payload_length = va_arg(ap, int);
332
		payload_length = va_arg(ap, unsigned int);
321
333
322
		if (payload_length < 0)
323
			gg_debug(GG_DEBUG_MISC, "// gg_send_packet() invalid payload length (%d)\n", payload_length);
324
	
325
		if (!(tmp2 = realloc(tmp, sizeof(struct gg_header) + tmp_length + payload_length))) {
334
		if (!(tmp2 = realloc(tmp, sizeof(struct gg_header) + tmp_length + payload_length))) {
326
                        gg_debug(GG_DEBUG_MISC, "// gg_send_packet() not enough memory for payload\n");
335
                        gg_debug(GG_DEBUG_MISC, "// gg_send_packet() not enough memory for payload\n");
327
			free(tmp);
336
			free(tmp);

Return to bug 97408