Vladimir N. Oleynik writes:

Ming-Ching,

>>No. Here there are no mistakes.
>>You using POST metod.
>>For get data you should read from stdin CONTENT_LENGTH bytes.

>Hower as I posted a little while ago, there is indeed a bug
>in POST method if the CONTENT_LENGTH is bigger
>than sizeof(wbuf[128]). So if your CGI script is expecting to
>read the full CONTENT_LENGTH, it might block forever,
>because it will only transfer sizeof(wbuf) to the CGI.

Ok, Ok. I should find time to understand with a problem.
Try attached patch.


--w
vodz
This commit is contained in:
Eric Andersen 2004-08-26 22:22:50 +00:00
parent 52499cb9ae
commit 97a1de10e9

View File

@ -1244,19 +1244,29 @@ static int sendCgi(const char *url,
}
} else if(bodyLen > 0 && post_readed_size == 0 && FD_ISSET(a_c_r, &readSet)) {
count = bodyLen > sizeof(wbuf) ? sizeof(wbuf) : bodyLen;
count = bb_full_read(a_c_r, wbuf, count);
count = safe_read(a_c_r, wbuf, count);
if(count > 0) {
post_readed_size += count;
bodyLen -= count;
} else {
bodyLen = 0; /* closed */
}
} else if(FD_ISSET(inFd, &readSet)) {
}
if(FD_ISSET(inFd, &readSet)) {
int s = a_c_w;
char *rbuf = config->buf;
#ifndef PIPE_BUF
# define PIPESIZE 4096 /* amount of buffering in a pipe */
#else
# define PIPESIZE PIPE_BUF
#endif
#if PIPESIZE >= MAX_MEMORY_BUFF
# error "PIPESIZE >= MAX_MEMORY_BUFF"
#endif
// There is something to read
count = bb_full_read(inFd, rbuf, MAX_MEMORY_BUFF-1);
count = safe_read(inFd, rbuf, PIPESIZE);
if (count == 0)
break; /* closed */
if (count > 0) {