You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "Mathihalli, Madhusudan" <ma...@hp.com> on 2004/05/13 00:08:14 UTC
RE: [PATCH] RE: Regarding parse_byterange()
>-----Original Message-----
>From: Joe Orton [mailto:jorton@redhat.com]
>Sent: Friday, April 30, 2004 3:08 AM
>
>Looks fine, though it doesn't handle errors in apr_atoi64
>itself so it would be good to surround the calls with a single
>errno = 0 / ... /
>if (errno) return -1; check too.
>
It seems like I didn't follow up on this mail :(
I don't like the idea of application programs setting the value of
'errno' to zero.
However, if that's the correct method - then I don't have much choice :)
Here's the new patch - if I don't hear any objections, I'll go ahead and
commit it.
-Madhu
Index: http_protocol.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/http/http_protocol.c,v
retrieving revision 1.479
diff -u -r1.479 http_protocol.c
--- http_protocol.c 9 Feb 2004 20:29:20 -0000 1.479
+++ http_protocol.c 12 May 2004 22:03:36 -0000
@@ -2800,6 +2800,7 @@
static int parse_byterange(char *range, apr_off_t clength,
apr_off_t *start, apr_off_t *end)
{
+ apr_int64_t val;
char *dash = strchr(range, '-');
if (!dash) {
@@ -2814,9 +2815,17 @@
else {
*dash = '\0';
dash++;
- *start = apr_atoi64(range);
+
+ errno = 0;
+ val = apr_atoi64(range);
+ if ((errno != 0) || ((*start = val) != val)) {
+ return -1;
+ }
if (*dash) {
- *end = apr_atoi64(dash);
+ val = apr_atoi64(dash);
+ if ((errno != 0) || ((*end = val) != val)) {
+ return -1;
+ }
}
else { /* "5-" */
*end = clength - 1;