#include <zlib.h>
#include "git2/object.h"
#include "git2/sys/odb_backend.h"
-#include "fileops.h"
+#include "futils.h"
#include "hash.h"
#include "odb.h"
#include "delta.h"
* (including the initial sequence in the head buffer).
*/
if (GIT_ADD_SIZET_OVERFLOW(&alloc_size, hdr.size, 1) ||
- (body = git__malloc(alloc_size)) == NULL) {
+ (body = git__calloc(1, alloc_size)) == NULL) {
error = -1;
goto done;
}
git_rawobj *out, const unsigned char *data, size_t len)
{
git_zstream zs = GIT_ZSTREAM_INIT;
- obj_hdr hdr;
- unsigned char inflated[MAX_HEADER_LEN];
+ obj_hdr hdr = {0};
+ unsigned char inflated[MAX_HEADER_LEN] = {0};
size_t header_len, inflated_len = sizeof(inflated);
int error;
static int read_header_loose(git_rawobj *out, git_buf *loc)
{
unsigned char obj[1024];
- int fd, obj_len, error;
+ ssize_t obj_len;
+ int fd, error;
assert(out && loc);
out->data = NULL;
- if ((error = fd = git_futils_open_ro(loc->ptr)) < 0 ||
- (error = obj_len = p_read(fd, obj, sizeof(obj))) < 0)
+ if ((error = fd = git_futils_open_ro(loc->ptr)) < 0)
+ goto done;
+
+ if ((obj_len = p_read(fd, obj, sizeof(obj))) < 0) {
+ error = (int)obj_len;
goto done;
+ }
if (!is_zlib_compressed_data(obj, (size_t)obj_len))
error = read_header_loose_packlike(out, obj, (size_t)obj_len);
return flags;
}
-static int loose_backend__writestream(git_odb_stream **stream_out, git_odb_backend *_backend, git_off_t length, git_object_t type)
+static int loose_backend__writestream(git_odb_stream **stream_out, git_odb_backend *_backend, git_object_size_t length, git_object_t type)
{
loose_backend *backend;
loose_writestream *stream = NULL;
size_t hdrlen;
int error;
- assert(_backend && length >= 0);
+ assert(_backend);
backend = (loose_backend *)_backend;
*stream_out = NULL;
size_t start_remain = stream->start_len - stream->start_read;
int total = 0, error;
+ buffer_len = min(buffer_len, INT_MAX);
+
/*
* if we read more than just the header in the initial read, play
* that back for the caller.
buffer += chunk;
stream->start_read += chunk;
- total += chunk;
+ total += (int)chunk;
buffer_len -= chunk;
}
if (buffer_len) {
- size_t chunk = min(buffer_len, INT_MAX);
+ size_t chunk = buffer_len;
if ((error = git_zstream_get_output(buffer, &chunk, &stream->zstream)) < 0)
return error;
- total += chunk;
+ total += (int)chunk;
}
- return total;
+ return (int)total;
}
static void loose_backend__readstream_free(git_odb_stream *_stream)