Simplify fuzz tests using LicenseWithUsageEntryFuzz
Merged from https://widevine-internal-review.googlesource.com/175060 Change-Id: I2f245ac998883e2a31cde361e30b36f00681262c
This commit is contained in:
@@ -11,19 +11,15 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::LicenseWithUsageEntryFuzz entry;
|
||||
entry.Initialize();
|
||||
entry.CreateUsageTableHeader();
|
||||
// Open a session, create a usage entry.
|
||||
wvoec::Session* session = entry.license_messages().session();
|
||||
session->open();
|
||||
entry.InstallTestDrmKey(session);
|
||||
session->CreateNewUsageEntry();
|
||||
session->GenerateNonce();
|
||||
entry.InstallTestDrmKey();
|
||||
entry.session().CreateNewUsageEntry();
|
||||
entry.session().GenerateNonce();
|
||||
std::vector<uint8_t> encrypted_usage_header;
|
||||
session->UpdateUsageEntry(&encrypted_usage_header);
|
||||
entry.session().UpdateUsageEntry(&encrypted_usage_header);
|
||||
// LoadLicense sets the pst for usage entry.
|
||||
entry.LoadLicense();
|
||||
OEMCrypto_DeactivateUsageEntry(entry.session().session_id(), data, size);
|
||||
entry.Terminate();
|
||||
|
||||
OEMCrypto_DeactivateUsageEntry(session->session_id(), data, size);
|
||||
session->close();
|
||||
OEMCrypto_Terminate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -143,33 +143,36 @@ class OEMCryptoRenewalAPIFuzz {
|
||||
|
||||
class LicenseWithUsageEntryFuzz {
|
||||
public:
|
||||
LicenseWithUsageEntryFuzz() : license_messages_(&session_) {
|
||||
LicenseWithUsageEntryFuzz() : license_messages_(&session_fuzz_.session()) {
|
||||
license_messages_.set_pst("my_pst");
|
||||
}
|
||||
|
||||
void Initialize() { InitializeFuzz(session_util_); }
|
||||
void Initialize() { session_fuzz_.Initialize(); }
|
||||
|
||||
void InstallTestDrmKey(Session* session) {
|
||||
session_util_.InstallTestDrmKey(session);
|
||||
}
|
||||
void Terminate() { session_fuzz_.Terminate(); }
|
||||
|
||||
void CreateUsageTableHeader();
|
||||
|
||||
void InstallTestDrmKey() { session_fuzz_.InstallTestDrmKey(); }
|
||||
|
||||
void LoadLicense();
|
||||
|
||||
LicenseRoundTrip& license_messages() { return license_messages_; }
|
||||
|
||||
const LicenseRoundTrip& license_messages() const { return license_messages_; }
|
||||
|
||||
const vector<uint8_t>& encrypted_usage_header() const {
|
||||
const std::vector<uint8_t>& encrypted_usage_header() const {
|
||||
return encrypted_usage_header_;
|
||||
}
|
||||
|
||||
Session& session() { return session_fuzz_.session(); }
|
||||
|
||||
const Session& session() const { return session_fuzz_.session(); }
|
||||
|
||||
private:
|
||||
SessionUtil session_util_;
|
||||
vector<uint8_t> encrypted_usage_header_;
|
||||
SessionFuzz session_fuzz_;
|
||||
LicenseRoundTrip license_messages_;
|
||||
Session session_;
|
||||
std::vector<uint8_t> encrypted_usage_header_;
|
||||
};
|
||||
|
||||
// Convert data from FuzzedDataProvider to valid enum value.
|
||||
|
||||
@@ -35,17 +35,16 @@ extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
|
||||
extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* data, size_t size,
|
||||
size_t max_size, unsigned int seed) {
|
||||
entry.CreateUsageTableHeader();
|
||||
wvoec::Session* s = entry.license_messages().session();
|
||||
s->open();
|
||||
entry.InstallTestDrmKey(s);
|
||||
if (LoadUsageEntryWithFuzzedData(s->session_id(), data, size) !=
|
||||
entry.session().open();
|
||||
entry.InstallTestDrmKey();
|
||||
if (LoadUsageEntryWithFuzzedData(entry.session().session_id(), data, size) !=
|
||||
OEMCrypto_SUCCESS) {
|
||||
s->CreateNewUsageEntry();
|
||||
entry.session().CreateNewUsageEntry();
|
||||
std::vector<uint8_t> encrypted_usage_header;
|
||||
s->UpdateUsageEntry(&encrypted_usage_header);
|
||||
const uint32_t usage_entry_number = s->usage_entry_number();
|
||||
entry.session().UpdateUsageEntry(&encrypted_usage_header);
|
||||
const uint32_t usage_entry_number = entry.session().usage_entry_number();
|
||||
const std::vector<uint8_t>& encrypted_usage_entry =
|
||||
s->encrypted_usage_entry();
|
||||
entry.session().encrypted_usage_entry();
|
||||
size = sizeof(usage_entry_number) + encrypted_usage_entry.size();
|
||||
if (size > max_size) {
|
||||
return 0;
|
||||
@@ -55,14 +54,13 @@ extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* data, size_t size,
|
||||
memcpy(data + sizeof(usage_entry_number), encrypted_usage_entry.data(),
|
||||
encrypted_usage_entry.size());
|
||||
}
|
||||
s->close();
|
||||
entry.session().close();
|
||||
return LLVMFuzzerMutate(data, size, max_size);
|
||||
}
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::Session s;
|
||||
s.open();
|
||||
LoadUsageEntryWithFuzzedData(s.session_id(), data, size);
|
||||
s.close();
|
||||
entry.session().open();
|
||||
LoadUsageEntryWithFuzzedData(entry.session().session_id(), data, size);
|
||||
entry.session().close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* data, size_t size,
|
||||
memcpy(data, entry.encrypted_usage_header().data(),
|
||||
entry.encrypted_usage_header().size());
|
||||
}
|
||||
OEMCrypto_Terminate();
|
||||
entry.Terminate();
|
||||
return LLVMFuzzerMutate(data, size, max_size);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,35 +6,24 @@
|
||||
#include "OEMCryptoCENC.h"
|
||||
#include "oemcrypto_fuzz_helper.h"
|
||||
|
||||
namespace {
|
||||
|
||||
// Avoid calling non-trivial destructor.
|
||||
wvoec::LicenseWithUsageEntryFuzz& entry = *new wvoec::LicenseWithUsageEntryFuzz;
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
|
||||
wvoec::RedirectStdoutToFile();
|
||||
entry.Initialize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::RedirectStdoutToFile();
|
||||
|
||||
wvoec::LicenseWithUsageEntryFuzz entry;
|
||||
entry.Initialize();
|
||||
entry.CreateUsageTableHeader();
|
||||
wvoec::Session* s = entry.license_messages().session();
|
||||
s->open();
|
||||
entry.InstallTestDrmKey(s);
|
||||
s->CreateNewUsageEntry();
|
||||
entry.InstallTestDrmKey();
|
||||
entry.session().CreateNewUsageEntry();
|
||||
std::vector<uint8_t> encrypted_usage_header;
|
||||
s->UpdateUsageEntry(&encrypted_usage_header);
|
||||
s->close();
|
||||
entry.session().UpdateUsageEntry(&encrypted_usage_header);
|
||||
entry.session().close();
|
||||
|
||||
s->open();
|
||||
s->ReloadUsageEntry();
|
||||
entry.session().open();
|
||||
entry.session().ReloadUsageEntry();
|
||||
OEMCrypto_MoveEntry(
|
||||
s->session_id(),
|
||||
entry.session().session_id(),
|
||||
FuzzedDataProvider(data, size).ConsumeIntegral<uint32_t>());
|
||||
s->close();
|
||||
|
||||
entry.Terminate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace {
|
||||
|
||||
constexpr size_t MAX_FUZZ_PST_REPORT_BUFFER_LENGTH = 5 * wvoec::MB;
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::RedirectStdoutToFile();
|
||||
@@ -19,30 +19,29 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::LicenseWithUsageEntryFuzz entry;
|
||||
entry.Initialize();
|
||||
entry.CreateUsageTableHeader();
|
||||
// Open a session, create a usage entry.
|
||||
wvoec::Session* session = entry.license_messages().session();
|
||||
session->open();
|
||||
entry.InstallTestDrmKey(session);
|
||||
session->CreateNewUsageEntry();
|
||||
session->GenerateNonce();
|
||||
entry.InstallTestDrmKey();
|
||||
entry.session().CreateNewUsageEntry();
|
||||
entry.session().GenerateNonce();
|
||||
std::vector<uint8_t> encrypted_usage_header;
|
||||
session->UpdateUsageEntry(&encrypted_usage_header);
|
||||
entry.session().UpdateUsageEntry(&encrypted_usage_header);
|
||||
// Sets pst for usage entry.
|
||||
entry.LoadLicense();
|
||||
|
||||
FuzzedDataProvider fuzzed_data(data, size);
|
||||
|
||||
// pst_report_buffer and pst_report_buffer_length parameters
|
||||
size_t pst_report_buffer_length_data =
|
||||
fuzzed_data.ConsumeIntegralInRange<size_t>(
|
||||
0, MAX_FUZZ_PST_REPORT_BUFFER_LENGTH);
|
||||
std::vector<uint8_t> pst_report_buffer(pst_report_buffer_length_data);
|
||||
size_t* const pst_report_buffer_length =
|
||||
fuzzed_data.ConsumeBool() ? &pst_report_buffer_length_data : nullptr;
|
||||
const std::vector<uint8_t> pst = fuzzed_data.ConsumeRemainingBytes<uint8_t>();
|
||||
// Call API with fuzzed pst_buffer_length, pst.
|
||||
OEMCrypto_ReportUsage(session->session_id(), pst.data(), pst.size(),
|
||||
pst_report_buffer.data(), pst_report_buffer_length);
|
||||
session->close();
|
||||
OEMCrypto_Terminate();
|
||||
|
||||
const std::vector<uint8_t> pst = fuzzed_data.ConsumeRemainingBytes<uint8_t>();
|
||||
|
||||
OEMCrypto_ReportUsage(entry.session().session_id(), pst.data(), pst.size(),
|
||||
pst_report_buffer.data(), pst_report_buffer_length);
|
||||
|
||||
entry.Terminate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -6,32 +6,21 @@
|
||||
#include "OEMCryptoCENC.h"
|
||||
#include "oemcrypto_fuzz_helper.h"
|
||||
|
||||
namespace {
|
||||
|
||||
// Avoid calling non-trivial destructor.
|
||||
wvoec::LicenseWithUsageEntryFuzz& entry = *new wvoec::LicenseWithUsageEntryFuzz;
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
|
||||
wvoec::RedirectStdoutToFile();
|
||||
entry.Initialize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::RedirectStdoutToFile();
|
||||
|
||||
wvoec::LicenseWithUsageEntryFuzz entry;
|
||||
entry.Initialize();
|
||||
entry.CreateUsageTableHeader();
|
||||
wvoec::Session* s = entry.license_messages().session();
|
||||
s->open();
|
||||
entry.InstallTestDrmKey(s);
|
||||
s->CreateNewUsageEntry();
|
||||
s->close();
|
||||
entry.InstallTestDrmKey();
|
||||
entry.session().CreateNewUsageEntry();
|
||||
entry.session().close();
|
||||
|
||||
s->open();
|
||||
entry.session().open();
|
||||
OEMCrypto_ReuseUsageEntry(
|
||||
s->session_id(),
|
||||
entry.session().session_id(),
|
||||
FuzzedDataProvider(data, size).ConsumeIntegral<uint32_t>());
|
||||
s->close();
|
||||
|
||||
entry.Terminate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -14,15 +14,21 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
wvoec::LicenseWithUsageEntryFuzz entry;
|
||||
entry.Initialize();
|
||||
entry.CreateUsageTableHeader();
|
||||
|
||||
FuzzedDataProvider fuzzed_data(data, size);
|
||||
|
||||
const uint32_t new_entry_count = fuzzed_data.ConsumeIntegral<uint32_t>();
|
||||
|
||||
// header_buffer and header_buffer_length parameters
|
||||
size_t header_buffer_length_data = fuzzed_data.ConsumeIntegralInRange<size_t>(
|
||||
0, wvoec::MAX_FUZZ_OUTPUT_LENGTH);
|
||||
std::vector<uint8_t> header_buffer(header_buffer_length_data);
|
||||
size_t* const header_buffer_length =
|
||||
fuzzed_data.ConsumeBool() ? &header_buffer_length_data : nullptr;
|
||||
|
||||
OEMCrypto_ShrinkUsageTableHeader(new_entry_count, header_buffer.data(),
|
||||
header_buffer_length);
|
||||
OEMCrypto_Terminate();
|
||||
|
||||
entry.Terminate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user