commit - 9ca9aafb026269aef00e469133fb7d1e3c224952
commit + a85917112992dbff7d0827f6cf65c6b5a3fb7bd2
blob - 52d8dac526f9596a3b372685396afc74d8eeea47
blob + 7ebffb4ae32b0d4e6842a6fa0787caa8ad38dfcb
--- lib/object.c
+++ lib/object.c
repo, fd);
}
- if (hdrlen > size) {
- err = got_error(GOT_ERR_BAD_OBJ_HDR);
- goto done;
- }
-
*obj = calloc(1, sizeof(**obj));
if (*obj == NULL) {
err = got_error_from_errno("calloc");
goto done;
}
- if (sb.st_size != size) {
+ if (sb.st_size != hdrlen + size) {
err = got_error(GOT_ERR_PRIVSEP_LEN);
goto done;
}
blob - 61891c554c130e0e597d44f689d9d93fec69b64d
blob + ebbe86bd40a3407e2166b0cfbe3a8490c353f30c
--- lib/privsep.c
+++ lib/privsep.c
iobj.hdrlen = hdrlen;
iobj.size = size;
- if (data && size <= GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX)
- len += (size_t)size;
+ if (data && size + hdrlen <= GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX)
+ len += (size_t)size + hdrlen;
wbuf = imsg_create(ibuf, GOT_IMSG_RAW_OBJECT, 0, 0, len);
if (wbuf == NULL) {
return err;
}
- if (data && size <= GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX) {
- if (imsg_add(wbuf, data, size) == -1) {
+ if (data && size + hdrlen <= GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX) {
+ if (imsg_add(wbuf, data, size + hdrlen) == -1) {
err = got_error_from_errno("imsg_add RAW_OBJECT");
ibuf_free(wbuf);
return err;
break;
}
- if (*size > GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX) {
+ if (*size + *hdrlen > GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX) {
err = got_error(GOT_ERR_PRIVSEP_LEN);
break;
}
- *outbuf = malloc(*size);
+ *outbuf = malloc(*size + *hdrlen);
if (*outbuf == NULL) {
err = got_error_from_errno("malloc");
break;
}
- memcpy(*outbuf, imsg.data + sizeof(*iobj), *size);
+ memcpy(*outbuf, imsg.data + sizeof(*iobj), *size + *hdrlen);
break;
default:
err = got_error(GOT_ERR_PRIVSEP_MSG);
blob - 42395bad277f640b4fc012757d30a1695d7b5f4a
blob + 8cb2bc37152c96e55501d1e2f7927e159f2ca29f
--- libexec/got-read-object/got-read-object.c
+++ libexec/got-read-object/got-read-object.c
return err;
}
- if (obj->size <= GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX)
+ if (obj->size + obj->hdrlen <= GOT_PRIVSEP_INLINE_OBJECT_DATA_MAX)
err = got_inflate_to_mem(&data, &len, &consumed, f);
else
err = got_inflate_to_fd(&len, f, outfd);
goto done;
}
- err = got_privsep_send_raw_obj(ibuf, len, obj->hdrlen, data);
+ err = got_privsep_send_raw_obj(ibuf, obj->size, obj->hdrlen, data);
+
done:
free(data);
if (fclose(f) == EOF && err == NULL)