mirror of https://github.com/mirror/busybox.git
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 vodz1_00_stable_10817
parent
52499cb9ae
commit
97a1de10e9
|
@ -1244,19 +1244,29 @@ static int sendCgi(const char *url,
|
||||||
}
|
}
|
||||||
} else if(bodyLen > 0 && post_readed_size == 0 && FD_ISSET(a_c_r, &readSet)) {
|
} else if(bodyLen > 0 && post_readed_size == 0 && FD_ISSET(a_c_r, &readSet)) {
|
||||||
count = bodyLen > sizeof(wbuf) ? sizeof(wbuf) : bodyLen;
|
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) {
|
if(count > 0) {
|
||||||
post_readed_size += count;
|
post_readed_size += count;
|
||||||
bodyLen -= count;
|
bodyLen -= count;
|
||||||
} else {
|
} else {
|
||||||
bodyLen = 0; /* closed */
|
bodyLen = 0; /* closed */
|
||||||
}
|
}
|
||||||
} else if(FD_ISSET(inFd, &readSet)) {
|
}
|
||||||
|
if(FD_ISSET(inFd, &readSet)) {
|
||||||
int s = a_c_w;
|
int s = a_c_w;
|
||||||
char *rbuf = config->buf;
|
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
|
// There is something to read
|
||||||
count = bb_full_read(inFd, rbuf, MAX_MEMORY_BUFF-1);
|
count = safe_read(inFd, rbuf, PIPESIZE);
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
break; /* closed */
|
break; /* closed */
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
|
|
Loading…
Reference in New Issue