Merge branch 'rs/imap-send-next-arg-fix' into maint
Error checking in "git imap-send" for empty response has been improved. * rs/imap-send-next-arg-fix: imap-send: handle missing response codes gracefully imap-send: handle NULL return of next_arg()
This commit is contained in:
commit
95bf6151dc
15
imap-send.c
15
imap-send.c
@ -683,7 +683,7 @@ static int parse_response_code(struct imap_store *ctx, struct imap_cmd_cb *cb,
|
|||||||
struct imap *imap = ctx->imap;
|
struct imap *imap = ctx->imap;
|
||||||
char *arg, *p;
|
char *arg, *p;
|
||||||
|
|
||||||
if (*s != '[')
|
if (!s || *s != '[')
|
||||||
return RESP_OK; /* no response code */
|
return RESP_OK; /* no response code */
|
||||||
s++;
|
s++;
|
||||||
if (!(p = strchr(s, ']'))) {
|
if (!(p = strchr(s, ']'))) {
|
||||||
@ -692,6 +692,10 @@ static int parse_response_code(struct imap_store *ctx, struct imap_cmd_cb *cb,
|
|||||||
}
|
}
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
arg = next_arg(&s);
|
arg = next_arg(&s);
|
||||||
|
if (!arg) {
|
||||||
|
fprintf(stderr, "IMAP error: empty response code\n");
|
||||||
|
return RESP_BAD;
|
||||||
|
}
|
||||||
if (!strcmp("UIDVALIDITY", arg)) {
|
if (!strcmp("UIDVALIDITY", arg)) {
|
||||||
if (!(arg = next_arg(&s)) || !(ctx->uidvalidity = atoi(arg))) {
|
if (!(arg = next_arg(&s)) || !(ctx->uidvalidity = atoi(arg))) {
|
||||||
fprintf(stderr, "IMAP error: malformed UIDVALIDITY status\n");
|
fprintf(stderr, "IMAP error: malformed UIDVALIDITY status\n");
|
||||||
@ -724,7 +728,8 @@ static int get_cmd_result(struct imap_store *ctx, struct imap_cmd *tcmd)
|
|||||||
{
|
{
|
||||||
struct imap *imap = ctx->imap;
|
struct imap *imap = ctx->imap;
|
||||||
struct imap_cmd *cmdp, **pcmdp;
|
struct imap_cmd *cmdp, **pcmdp;
|
||||||
char *cmd, *arg, *arg1;
|
char *cmd;
|
||||||
|
const char *arg, *arg1;
|
||||||
int n, resp, resp2, tag;
|
int n, resp, resp2, tag;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -732,6 +737,10 @@ static int get_cmd_result(struct imap_store *ctx, struct imap_cmd *tcmd)
|
|||||||
return RESP_BAD;
|
return RESP_BAD;
|
||||||
|
|
||||||
arg = next_arg(&cmd);
|
arg = next_arg(&cmd);
|
||||||
|
if (!arg) {
|
||||||
|
fprintf(stderr, "IMAP error: empty response\n");
|
||||||
|
return RESP_BAD;
|
||||||
|
}
|
||||||
if (*arg == '*') {
|
if (*arg == '*') {
|
||||||
arg = next_arg(&cmd);
|
arg = next_arg(&cmd);
|
||||||
if (!arg) {
|
if (!arg) {
|
||||||
@ -806,6 +815,8 @@ static int get_cmd_result(struct imap_store *ctx, struct imap_cmd *tcmd)
|
|||||||
if (cmdp->cb.cont || cmdp->cb.data)
|
if (cmdp->cb.cont || cmdp->cb.data)
|
||||||
imap->literal_pending = 0;
|
imap->literal_pending = 0;
|
||||||
arg = next_arg(&cmd);
|
arg = next_arg(&cmd);
|
||||||
|
if (!arg)
|
||||||
|
arg = "";
|
||||||
if (!strcmp("OK", arg))
|
if (!strcmp("OK", arg))
|
||||||
resp = DRV_OK;
|
resp = DRV_OK;
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user