diff --git a/sparsebundlefs.cpp b/sparsebundlefs.cpp index d5a152d..d1bb5e2 100644 --- a/sparsebundlefs.cpp +++ b/sparsebundlefs.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -87,7 +88,8 @@ static int sparsebundle_read(const char *path, char *buffer, size_t length, off_ off_t band_number = (offset + bytes_read) / SB_DATA->band_size; off_t band_offset = (offset + bytes_read) % SB_DATA->band_size; - ssize_t to_read = length - bytes_read; + ssize_t to_read = min(static_cast(length - bytes_read), + SB_DATA->band_size - band_offset); char *band_name; asprintf(&band_name, "%s/bands/%llx", SB_DATA->path, band_number);