| Index: tools/ipc_fuzzer/fuzzer/fuzzer.cc
|
| diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
|
| index 46e26a760c5a4702563d5d13976e28e6d05ba612..64056b0b9ab521b0c87f7e737cbad71cfcc472c7 100644
|
| --- a/tools/ipc_fuzzer/fuzzer/fuzzer.cc
|
| +++ b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
|
| @@ -1136,8 +1136,8 @@ struct FuzzTraits<HWND> {
|
| #endif
|
|
|
| template <>
|
| -struct FuzzTraits<IPC::Message> {
|
| - static bool Fuzz(IPC::Message* p, Fuzzer* fuzzer) {
|
| +struct FuzzTraits<std::unique_ptr<IPC::Message>> {
|
| + static bool Fuzz(std::unique_ptr<IPC::Message>* p, Fuzzer* fuzzer) {
|
| // TODO(mbarbella): Support mutation.
|
| if (!fuzzer->ShouldGenerate())
|
| return true;
|
| @@ -1145,10 +1145,11 @@ struct FuzzTraits<IPC::Message> {
|
| if (g_function_vector.empty())
|
| return false;
|
| size_t index = RandInRange(g_function_vector.size());
|
| - IPC::Message* ipc_message = (*g_function_vector[index])(NULL, fuzzer);
|
| + std::unique_ptr<IPC::Message> ipc_message =
|
| + (*g_function_vector[index])(nullptr, fuzzer);
|
| if (!ipc_message)
|
| return false;
|
| - p = ipc_message;
|
| + *p = std::move(ipc_message);
|
| return true;
|
| }
|
| };
|
| @@ -1734,8 +1735,8 @@ template <typename Message>
|
| class MessageFactory<Message, IPC::MessageKind::CONTROL> {
|
| public:
|
| template <typename... Args>
|
| - static Message* New(const Args&... args) {
|
| - return new Message(args...);
|
| + static std::unique_ptr<Message> New(const Args&... args) {
|
| + return base::MakeUnique<Message>(args...);
|
| }
|
| };
|
|
|
| @@ -1743,8 +1744,8 @@ template <typename Message>
|
| class MessageFactory<Message, IPC::MessageKind::ROUTED> {
|
| public:
|
| template <typename... Args>
|
| - static Message* New(const Args&... args) {
|
| - return new Message(RandInRange(MAX_FAKE_ROUTING_ID), args...);
|
| + static std::unique_ptr<Message> New(const Args&... args) {
|
| + return base::MakeUnique<Message>(RandInRange(MAX_FAKE_ROUTING_ID), args...);
|
| }
|
| };
|
|
|
| @@ -1756,15 +1757,15 @@ class FuzzerHelper<IPC::MessageT<Meta, std::tuple<Ins...>, void>> {
|
| public:
|
| using Message = IPC::MessageT<Meta, std::tuple<Ins...>, void>;
|
|
|
| - static IPC::Message* Fuzz(IPC::Message* msg, Fuzzer* fuzzer) {
|
| + static std::unique_ptr<IPC::Message> Fuzz(IPC::Message* msg, Fuzzer* fuzzer) {
|
| return FuzzImpl(msg, fuzzer, base::MakeIndexSequence<sizeof...(Ins)>());
|
| }
|
|
|
| private:
|
| template <size_t... Ns>
|
| - static IPC::Message* FuzzImpl(IPC::Message* msg,
|
| - Fuzzer* fuzzer,
|
| - base::IndexSequence<Ns...>) {
|
| + static std::unique_ptr<IPC::Message> FuzzImpl(IPC::Message* msg,
|
| + Fuzzer* fuzzer,
|
| + base::IndexSequence<Ns...>) {
|
| typename Message::Param p;
|
| if (msg) {
|
| Message::Read(static_cast<Message*>(msg), &p);
|
| @@ -1783,18 +1784,18 @@ class FuzzerHelper<
|
| public:
|
| using Message = IPC::MessageT<Meta, std::tuple<Ins...>, std::tuple<Outs...>>;
|
|
|
| - static IPC::Message* Fuzz(IPC::Message* msg, Fuzzer* fuzzer) {
|
| + static std::unique_ptr<IPC::Message> Fuzz(IPC::Message* msg, Fuzzer* fuzzer) {
|
| return FuzzImpl(msg, fuzzer, base::MakeIndexSequence<sizeof...(Ins)>());
|
| }
|
|
|
| private:
|
| template <size_t... Ns>
|
| - static IPC::Message* FuzzImpl(IPC::Message* msg,
|
| - Fuzzer* fuzzer,
|
| - base::IndexSequence<Ns...>) {
|
| + static std::unique_ptr<IPC::Message> FuzzImpl(IPC::Message* msg,
|
| + Fuzzer* fuzzer,
|
| + base::IndexSequence<Ns...>) {
|
| typename Message::SendParam p;
|
| Message* real_msg = static_cast<Message*>(msg);
|
| - Message* new_msg = nullptr;
|
| + std::unique_ptr<Message> new_msg;
|
| if (real_msg) {
|
| Message::ReadSendParam(real_msg, &p);
|
| }
|
| @@ -1803,7 +1804,7 @@ class FuzzerHelper<
|
| std::get<Ns>(p)..., static_cast<Outs*>(nullptr)...);
|
| }
|
| if (real_msg && new_msg) {
|
| - MessageCracker::CopyMessageID(new_msg, real_msg);
|
| + MessageCracker::CopyMessageID(new_msg.get(), real_msg);
|
| } else if (!new_msg) {
|
| std::cerr << "Don't know how to handle " << Meta::kName << "\n";
|
| }
|
|
|