diff options
Diffstat (limited to 'Firestore/Example/FuzzTests')
-rw-r--r-- | Firestore/Example/FuzzTests/FSTFuzzTestsPrincipal.mm | 64 | ||||
-rw-r--r-- | Firestore/Example/FuzzTests/Firestore_FuzzTests_iOS-Info.plist | 24 |
2 files changed, 88 insertions, 0 deletions
diff --git a/Firestore/Example/FuzzTests/FSTFuzzTestsPrincipal.mm b/Firestore/Example/FuzzTests/FSTFuzzTestsPrincipal.mm new file mode 100644 index 0000000..63f6db0 --- /dev/null +++ b/Firestore/Example/FuzzTests/FSTFuzzTestsPrincipal.mm @@ -0,0 +1,64 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import <Foundation/NSObject.h> + +#include "LibFuzzer/FuzzerDefs.h" + +namespace { + +// Contains the code to be fuzzed. Called by the fuzzing library with +// different argument values for `data` and `size`. +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + // Code to be fuzz-tested here. + return 0; +} + +// Simulates calling the main() function of libFuzzer (FuzzerMain.cpp). +int RunFuzzTestingMain() { + // Arguments to libFuzzer main() function should be added to this array, + // e.g., dictionaries, corpus, number of runs, jobs, etc. + char *program_args[] = { + const_cast<char *>("RunFuzzTestingMain") // First argument is program name. + }; + char **argv = program_args; + int argc = sizeof(program_args) / sizeof(program_args[0]); + + // Start fuzzing using libFuzzer's driver. + return fuzzer::FuzzerDriver(&argc, &argv, LLVMFuzzerTestOneInput); +} + +} // namespace + +/** + * This class is registered as the NSPrincipalClass in the + * Firestore_FuzzTests_iOS bundle's Info.plist. XCTest instantiates this class + * to perform one-time setup for the test bundle, as documented here: + * + * https://developer.apple.com/documentation/xctest/xctestobservationcenter + */ +@interface FSTFuzzTestsPrincipal : NSObject +@end + +@implementation FSTFuzzTestsPrincipal + +- (instancetype)init { + self = [super init]; + RunFuzzTestingMain(); + return self; +} + +@end diff --git a/Firestore/Example/FuzzTests/Firestore_FuzzTests_iOS-Info.plist b/Firestore/Example/FuzzTests/Firestore_FuzzTests_iOS-Info.plist new file mode 100644 index 0000000..0d53e5f --- /dev/null +++ b/Firestore/Example/FuzzTests/Firestore_FuzzTests_iOS-Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>en</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>BNDL</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>NSPrincipalClass</key> + <string>FSTFuzzTestsPrincipal</string> + <key>CFBundleVersion</key> + <string>1</string> +</dict> +</plist> |