Don’t seek before start.
This code path is not hit on windows, because we always know the size of the file.
diff --git a/lib/zip_source_filep.c b/lib/zip_source_filep.c
index ea58aa8..9b38811 100644
--- a/lib/zip_source_filep.c
+++ b/lib/zip_source_filep.c
@@ -537,7 +537,12 @@
zip_error_set(&ctx->error, ZIP_ER_SEEK, errno);
return -1;
}
- new_current -= (zip_int64_t)ctx->start;
+ if (new_current < (zip_int64_t)ctx->start) {
+ new_current = 0;
+ }
+ else {
+ new_current -= (zip_int64_t)ctx->start;
+ }
need_seek = 0;
}
else {
diff --git a/lib/zip_source_win32handle.c b/lib/zip_source_win32handle.c
index ff375c1..256d997 100644
--- a/lib/zip_source_win32handle.c
+++ b/lib/zip_source_win32handle.c
@@ -359,7 +359,12 @@
return -1;
}
new_current = new_offset.QuadPart;
- new_current -= (zip_int64_t)ctx->start;
+ if (new_current < (zip_int64_t)ctx->start) {
+ new_current = 0;
+ }
+ else {
+ new_current -= (zip_int64_t)ctx->start;
+ }
need_seek = 0;
}
else {