diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2016-09-03 17:37:23 -0700 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2016-09-03 17:37:23 -0700 |
commit | ee5f55567bd457e4c721267a154b796dc679f458 (patch) | |
tree | 0e2fe16e771d8cf8939e9318d99f96490be3bd1d /ldid.cpp | |
parent | 4f63b59016d6952f0ddf408a3b1be97f10febc13 (diff) | |
download | ldid-ee5f55567bd457e4c721267a154b796dc679f458.tar.gz ldid-ee5f55567bd457e4c721267a154b796dc679f458.tar.zst ldid-ee5f55567bd457e4c721267a154b796dc679f458.zip |
Verify we do not overflow annoying 0x3000 padding.
Diffstat (limited to 'ldid.cpp')
-rw-r--r-- | ldid.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -1500,6 +1500,9 @@ std::vector<char> Sign(const void *idata, size_t isize, std::streambuf &output, } #endif + // XXX: this is just a "sufficiently large number" + size_t certificate(0x3000); + Allocate(idata, isize, output, fun([&](const MachHeader &mach_header, size_t size) -> size_t { size_t alloc(sizeof(struct SuperBlob)); @@ -1531,8 +1534,7 @@ std::vector<char> Sign(const void *idata, size_t isize, std::streambuf &output, if (!key.empty()) { alloc += sizeof(struct BlobIndex); alloc += sizeof(struct Blob); - // XXX: this is just a "sufficiently large number" - alloc += 0x3000; + alloc += certificate; } _foreach (slot, slots) @@ -1661,7 +1663,8 @@ std::vector<char> Sign(const void *idata, size_t isize, std::streambuf &output, std::string value(result); put(data, value.data(), value.size()); - insert(blobs, CSSLOT_SIGNATURESLOT, CSMAGIC_BLOBWRAPPER, data); + const auto &save(insert(blobs, CSSLOT_SIGNATURESLOT, CSMAGIC_BLOBWRAPPER, data)); + _assert(save.size() <= certificate); } #endif |