// Copyright 2021 Code Intelligence GmbH // // 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. package com.code_intelligence.jazzer.driver; import com.code_intelligence.jazzer.api.FuzzedDataProvider; import com.code_intelligence.jazzer.utils.UnsafeProvider; import com.github.fmeum.rules_jni.RulesJni; import sun.misc.Unsafe; public class FuzzedDataProviderImpl implements FuzzedDataProvider, AutoCloseable { static { RulesJni.loadLibrary("jazzer_fuzzed_data_provider", "/com/code_intelligence/jazzer/driver"); nativeInit(); } private static native void nativeInit(); private final byte[] javaData; private long originalDataPtr; private int originalRemainingBytes; // Accessed in fuzzed_data_provider.cpp. private long dataPtr; private int remainingBytes; private FuzzedDataProviderImpl(long dataPtr, int remainingBytes, byte[] javaData) { this.javaData = javaData; this.originalDataPtr = dataPtr; this.dataPtr = dataPtr; this.originalRemainingBytes = remainingBytes; this.remainingBytes = remainingBytes; } /** * Creates a {@link FuzzedDataProvider} that consumes bytes from an already existing native array. * *