Is it OK to try to free the modified "buffer" ptr? I thought we should preserve its value.
Yes, you are right, that code is illegal. The wonderful thing is that it's more than half a year old, and went unnoticed this far! Probably because the WineHQ server never failed during that period. Amazing. I wonder what have happened to it now.
We can use the "str" instead of the "buffer". I've tried such mod and it worked fine in my case:
Yes, your patch is good. Still I recommend something more, as I can't see why buffer should be dynamic at all. Please check it in case I made another mistake:
Index: programs/winetest/send.c =================================================================== RCS file: /home/wine/wine/programs/winetest/send.c,v retrieving revision 1.12 diff -u -r1.12 send.c --- programs/winetest/send.c 6 Jul 2004 21:03:22 -0000 1.12 +++ programs/winetest/send.c 18 Aug 2004 11:26:02 -0000 @@ -107,7 +107,7 @@ SOCKET s; FILE *f; #define BUFLEN 8192 - unsigned char *buffer; + unsigned char buffer[BUFLEN+1]; size_t bytes_read, total, filesize; char *str; int ret; @@ -127,7 +127,6 @@ "Upload File\r\n" "--" SEP "--\r\n";
- buffer = xmalloc (BUFLEN + 1); s = open_http ("test.winehq.org"); if (s == INVALID_SOCKET) return 1;
@@ -209,17 +208,15 @@ if (ret) { buffer[total] = 0; str = strstr (buffer, "\r\n\r\n"); - if (str) buffer = str + 4; + str = str ? str+4 : buffer; report (R_ERROR, "Can't submit logfile '%s'. " - "Server response: %s", name, buffer); + "Server response: %s", name, str); } - free (buffer); return ret;
abort2: fclose (f); abort1: close_http (s); - free (buffer); return 1; }
Thanks for the good spotting, Feri.