apache2_stream_read function ignores errors from ap_get_client_block is size_t
is unsigned
------------------------------------------------------------------------------------------
Key: AXIS2C-1387
URL: https://issues.apache.org/jira/browse/AXIS2C-1387
Project: Axis2-C
Issue Type: Bug
Components: build system (Unix/Linux)
Affects Versions: 1.6.0
Environment: CentOS 5.3
httpd-2.2.3
rampartc-1.3.0
dell precision desktop
Reporter: Murph McCloy
Priority: Minor
This problem has only been noticed when attempting to decompress input streams
via apache.
The problem occurs when a decompression payload fails to decompress properly.
In my test case it was because the payload had some flags set in the gzip
headers and mod_deflate doesn't support flags. mod_deflate then returned an
APR_EGENERAL error message. This message then bubbled up and was returned as a
-1 to apache2_stream_read.
This is a problem because size_t, on my system, is unsigned. The checks in
apache2_stream_read fail to catch a negative value in this scenario and dont
respond appropriately.
while (count - len > 0)
{
read = ap_get_client_block(stream_impl->request, (char *)buffer + len,
count - len);
if (read > 0)
{
len += read;
}
else
{
break;
}
}
The else statement will never get reached while read is unsigned. Also, the
while loop might have troubles as well. I would suggest modifying read and len
to be ssize_t so they match the return value of ap_get_client_block.
If I get this modified and working, I will submit a patch.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.