1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Copyright 2016 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.
- #include "ui/accessibility/ax_tree.h"
- #include "ui/accessibility/ax_tree_observer.h"
- class EmptyAXTreeObserver : public ui::AXTreeObserver {
- public:
- EmptyAXTreeObserver() {}
- ~EmptyAXTreeObserver() override {}
- };
- // Entry point for LibFuzzer.
- extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) {
- ui::AXTreeUpdate initial_state;
- size_t i = 0;
- while (i < size) {
- ui::AXNodeData node;
- node.id = data[i++];
- if (i < size) {
- size_t child_count = data[i++];
- for (size_t j = 0; j < child_count && i < size; j++)
- node.child_ids.push_back(data[i++]);
- }
- initial_state.nodes.push_back(node);
- }
- // Don't test absurdly large trees, it might time out.
- #if defined(NDEBUG)
- constexpr size_t kMaxNodes = 500000;
- #else
- constexpr size_t kMaxNodes = 50000;
- #endif
- if (initial_state.nodes.size() > kMaxNodes) {
- LOG(WARNING) << "Skipping input because it's too large";
- return 0;
- }
- // Run with --v=1 to aid in debugging a specific crash.
- VLOG(1) << "Input accessibility tree:\n" << initial_state.ToString();
- EmptyAXTreeObserver observer;
- ui::AXTree tree;
- tree.AddObserver(&observer);
- tree.Unserialize(initial_state);
- tree.RemoveObserver(&observer);
- return 0;
- }
|