libfetch: simplify code by merging protocol error handling branches
removes some code duplicationcute-signatures
parent
b2819a6d5a
commit
d909ebc25b
|
@ -722,8 +722,8 @@ retry_mode:
|
|||
}
|
||||
break;
|
||||
default:
|
||||
e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */
|
||||
goto ouch;
|
||||
/* XXX: error code should be prepared */
|
||||
goto protocol_error;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -736,33 +736,22 @@ retry_mode:
|
|||
case FTP_LPASSIVE_MODE:
|
||||
for (p = ln + 3; *p && !isdigit((unsigned char)*p); p++)
|
||||
/* nothing */ ;
|
||||
if (!*p) {
|
||||
e = FTP_PROTOCOL_ERROR;
|
||||
goto ouch;
|
||||
}
|
||||
if (!*p) goto protocol_error;
|
||||
l = (e == FTP_PASSIVE_MODE ? 6 : 21);
|
||||
for (i = 0; *p && i < l; i++, p++)
|
||||
addr[i] = strtol(p, &p, 10);
|
||||
if (i < l) {
|
||||
e = FTP_PROTOCOL_ERROR;
|
||||
goto ouch;
|
||||
}
|
||||
if (i < l) goto protocol_error;
|
||||
break;
|
||||
case FTP_EPASSIVE_MODE:
|
||||
for (p = ln + 3; *p && *p != '('; p++)
|
||||
/* nothing */ ;
|
||||
if (!*p) {
|
||||
e = FTP_PROTOCOL_ERROR;
|
||||
goto ouch;
|
||||
}
|
||||
if (!*p) goto protocol_error;
|
||||
++p;
|
||||
if (sscanf(p, "%c%c%c%d%c", &addr[0], &addr[1], &addr[2],
|
||||
&port, &addr[3]) != 5 ||
|
||||
addr[0] != addr[1] ||
|
||||
addr[0] != addr[2] || addr[0] != addr[3]) {
|
||||
e = FTP_PROTOCOL_ERROR;
|
||||
goto ouch;
|
||||
}
|
||||
addr[0] != addr[2] || addr[0] != addr[3])
|
||||
goto protocol_error;
|
||||
break;
|
||||
case FTP_SYNTAX_ERROR:
|
||||
if (verbose)
|
||||
|
@ -803,8 +792,8 @@ retry_mode:
|
|||
}
|
||||
break;
|
||||
default:
|
||||
e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */
|
||||
break;
|
||||
/* XXX: error code should be prepared */
|
||||
goto protocol_error;
|
||||
}
|
||||
|
||||
/* connect to data port */
|
||||
|
@ -907,8 +896,8 @@ retry_mode:
|
|||
}
|
||||
break;
|
||||
default:
|
||||
e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */
|
||||
goto ouch;
|
||||
/* XXX: error code should be prepared */
|
||||
goto protocol_error;
|
||||
}
|
||||
if (e != FTP_OK)
|
||||
goto ouch;
|
||||
|
@ -946,6 +935,8 @@ sysouch:
|
|||
close(sd);
|
||||
return (NULL);
|
||||
|
||||
protocol_error:
|
||||
e = FTP_PROTOCOL_ERROR;
|
||||
ouch:
|
||||
if (e != -1)
|
||||
ftp_seterr(e);
|
||||
|
|
|
@ -1044,8 +1044,7 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
|||
fetch_syserr();
|
||||
goto ouch;
|
||||
case hdr_error:
|
||||
http_seterr(HTTP_PROTOCOL_ERROR);
|
||||
goto ouch;
|
||||
goto protocol_error;
|
||||
case hdr_connection:
|
||||
/* XXX too weak? */
|
||||
keep_alive = (strcasecmp(p, "keep-alive") == 0);
|
||||
|
@ -1154,18 +1153,14 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
|||
}
|
||||
|
||||
/* check for inconsistencies */
|
||||
if (clength != -1 && length != -1 && clength != length) {
|
||||
http_seterr(HTTP_PROTOCOL_ERROR);
|
||||
goto ouch;
|
||||
}
|
||||
if (clength != -1 && length != -1 && clength != length)
|
||||
goto protocol_error;
|
||||
if (clength == -1)
|
||||
clength = length;
|
||||
if (clength != -1)
|
||||
length = offset + clength;
|
||||
if (length != -1 && size != -1 && length != size) {
|
||||
http_seterr(HTTP_PROTOCOL_ERROR);
|
||||
goto ouch;
|
||||
}
|
||||
if (length != -1 && size != -1 && length != size)
|
||||
goto protocol_error;
|
||||
if (size == -1)
|
||||
size = length;
|
||||
|
||||
|
@ -1176,10 +1171,8 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
|||
}
|
||||
|
||||
/* too far? */
|
||||
if (URL->offset > 0 && offset > URL->offset) {
|
||||
http_seterr(HTTP_PROTOCOL_ERROR);
|
||||
goto ouch;
|
||||
}
|
||||
if (URL->offset > 0 && offset > URL->offset)
|
||||
goto protocol_error;
|
||||
|
||||
/* report back real offset and size */
|
||||
URL->offset = offset;
|
||||
|
@ -1222,6 +1215,8 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
|||
|
||||
return (f);
|
||||
|
||||
protocol_error:
|
||||
http_seterr(HTTP_PROTOCOL_ERROR);
|
||||
ouch:
|
||||
if (url != URL)
|
||||
fetchFreeURL(url);
|
||||
|
|
Loading…
Reference in New Issue