Add a new LPM fuzzer for Mach message servers.

This fuzzer tool allows modeling the complex Mach IPC structures,
including the generation and transfer of port rights. It also adds a
build rule to convert textproto to binarypb, so that the seed corpus for
these fuzzers can be human-editable/readable.

Adds a simple fuzzer for the MachPortRendezvousServer.

Bug: 932175
Change-Id: I909e4a8bac802ea1d4d73d26fcb0834803324360
Reviewed-by: Mark Mentovai <>
Reviewed-by: Jonathan Metzman <>
Reviewed-by: Nico Weber <>
Cr-Original-Commit-Position: refs/heads/master@{#641854}
Cr-Mirrored-Commit: d45d88cf3d69928d8fe026bc88aa3d7a25853937
diff --git a/ b/
new file mode 100644
index 0000000..1da63e4
--- /dev/null
+++ b/
@@ -0,0 +1,30 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Helper script for use by GN to encode/decode proto files. The protoc tool
+requires using stdin/stdout for the --encode/--decode options, but that form
+of processing is not supported by GN.
+import argparse
+import subprocess
+def Main():
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--protoc', help='Path to protoc compiler.')
+  parser.add_argument('--infile', required=True,
+                      help='Path to input file that will be used as stdin.')
+  parser.add_argument('--outfile', required=True,
+                      help='Path to output file that will be used as stdout.')
+  args, passthrough_args = parser.parse_known_args()
+  stdin = open(args.infile, 'r')
+  stdout = open(args.outfile, 'w')
+  subprocess.check_call([args.protoc] + passthrough_args, stdin=stdin,
+      stdout=stdout)
+if __name__ == '__main__':
+  Main()