mirror of
https://github.com/expo/bsdiff.git
synced 2026-11-14 08:38:17 -10:00
Merge "bspatch_fuzzer: guard againts integer overflow with bad patch"
am: 10118144d0
Change-Id: I9d4f5f5e5de007efe56a4fea927989dcc6bea490
This commit is contained in:
commit
ea33dbd616
1 file changed
+6
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59:
|
||||
#include <fcntl.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -329,6 +330,8 @@ int bspatch(const std::unique_ptr<FileInterface>& old_file,
|
||||
|
||||
// Adjust pointers.
|
||||
newpos += control_entry.diff_size;
|
||||
if (oldpos > INT64_MAX - static_cast<int64_t>(control_entry.diff_size))
|
||||
return 2;
|
||||
oldpos += control_entry.diff_size;
|
||||
|
||||
if (oldpos > static_cast<int64_t>(old_file_size)) {
|
||||
@@ -358,6 +361,9 @@ int bspatch(const std::unique_ptr<FileInterface>& old_file,
|
||||
|
||||
// Adjust pointers.
|
||||
newpos += control_entry.extra_size;
|
||||
if (control_entry.offset_increment > 0 &&
|
||||
oldpos > INT64_MAX - control_entry.offset_increment)
|
||||
return 2;
|
||||
oldpos += control_entry.offset_increment;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user