| using executorch::extension::BufferDataLoader; | |
| using executorch::runtime::Program; | |
| static bool g_initialized = false; | |
| extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t* data, std::size_t size) { | |
| if (!g_initialized) { executorch::runtime::runtime_init(); g_initialized = true; } | |
| if (data == nullptr || size == 0 || size > 32U*1024U*1024U) return 0; | |
| BufferDataLoader loader(data, size); | |
| auto program = Program::load(&loader, Program::Verification::InternalConsistency); | |
| if (program.ok()) { | |
| auto& p = program.get(); | |
| auto n = p.num_methods(); | |
| for (size_t i = 0; i < n; ++i) { | |
| auto name = p.get_method_name(i); | |
| if (name.ok()) { | |
| auto meta = p.method_meta(name.get()); | |
| if (meta.ok()) { | |
| auto& m = meta.get(); | |
| size_t nb = m.num_backends(); | |
| for (size_t bi = 0; bi < nb; ++bi) { | |
| (void)m.get_backend_name(bi); // ONLY this call - no uses_backend() | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return 0; | |
| } | |