commit - e5ad73651d7663bfc6ca5d6f3ec622c5f59413bf
commit + 9069347b693ed2803ca224d77823b2e4e2f2e4e5
blob - d26165918de1c2cf191ee734e77336fd67356f58
blob + e3ee8c6f3ea1981934a38c2f4bd9e01e43d62c15
--- lib/delta.c
+++ lib/delta.c
next_delta_byte(const uint8_t **p, size_t *remain)
{
if (--(*remain) == 0)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA,
+ "delta data truncated");
(*p)++;
return NULL;
}
size_t n;
if (*remain < len)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA,
+ "copy from beyond end of delta data");
n = fwrite(*p, len, 1, outfile);
if (n != 1)
const uint8_t *p;
if (delta_len < GOT_DELTA_STREAM_LENGTH_MIN)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA, "delta too small");
p = delta_buf;
remain = delta_len;
*outsize= 0;
if (delta_len < GOT_DELTA_STREAM_LENGTH_MIN)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA, "delta too small");
p = delta_buf;
remain = delta_len;
if (SIZE_MAX - offset < len || offset + len < 0 ||
base_bufsz < offset + len ||
*outsize + len > maxoutsize)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA,
+ "bad delta copy length");
memcpy(outbuf + *outsize, base_buf + offset, len);
if (err == NULL) {
*outsize += len;
} else {
size_t len = (size_t)*p;
if (len == 0) {
- err = got_error(GOT_ERR_BAD_DELTA);
+ err = got_error_msg(GOT_ERR_BAD_DELTA,
+ "zero length delta");
break;
}
err = next_delta_byte(&p, &remain);
break;
if (remain < len || SIZE_MAX - *outsize < len ||
*outsize + len > maxoutsize)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA,
+ "bad delta copy length");
memcpy(outbuf + *outsize, p, len);
p += len;
remain -= len;
}
if (*outsize != result_size)
- err = got_error(GOT_ERR_BAD_DELTA);
+ err = got_error_msg(GOT_ERR_BAD_DELTA,
+ "delta application result size mismatch");
return err;
}
*outsize = 0;
if (delta_len < GOT_DELTA_STREAM_LENGTH_MIN)
- return got_error(GOT_ERR_BAD_DELTA);
+ return got_error_msg(GOT_ERR_BAD_DELTA, "delta too small");
p = delta_buf;
remain = delta_len;
} else {
size_t len = (size_t)*p;
if (len == 0) {
- err = got_error(GOT_ERR_BAD_DELTA);
+ err = got_error_msg(GOT_ERR_BAD_DELTA,
+ "zero length delta");
break;
}
err = next_delta_byte(&p, &remain);
}
if (*outsize != result_size)
- err = got_error(GOT_ERR_BAD_DELTA);
+ err = got_error_msg(GOT_ERR_BAD_DELTA,
+ "delta application result size mismatch");
if (memstream != NULL) {
if (fclose(memstream) == EOF)