CLEAN

Target: SheepShaver (PowerPC Mac emulator, C++)
Repo: https://github.com/cebix/macemu (SheepShaver/ subtree)
Date: 2026-03-31
Scan depth: all 5 MOADs

MOAD-0001 (CWE-407): CLEAN
  - block_cache.find() uses a 32768-slot hash table (block-cache.hpp), O(1) average.
  - sifter_list (rom_patches.cpp) is bounded to 32 entries, static array, init-time only.
  - IsMulticastRegistered (ether.cpp:113) is O(M) over multicast list, called per multicast
    packet from dlpi_stream_list loop. Both S (streams) and M (multicast addresses) are
    small in practice (single digits). Not a measurable defect.
  - find_fsitem_by_id / find_fsitem (extfs.cpp) are O(N) linked-list scans called once per
    FS operation, not inside an inner loop. No O(N^2) compound.
  - All ROM patch scanning (find_rom_data, find_rom_resource, find_rom_trap) is init-time
    startup work, not hot path.
  - ppc-decode.cpp uses an indexed ii_index_table array for O(1) instruction dispatch.

MOAD-0002 (Intertangle): CLEAN
  - KernelData / EmulatorData are fixed-layout structures representing the emulated Mac
    hardware state, not a god object coupling independent subsystems. They are raw memory
    mapped at fixed addresses as required by the Mac ROM interface.
  - Subsystems (audio, disk, video, ethernet, serial) each have their own source files and
    communicate through well-defined Mac OS traps and interrupt flags.

MOAD-0003 (Leaked Context): CLEAN
  - No thread_local, __thread, pthread_key_create, or pthread_getspecific usage found.
  - SheepShaver uses a single emulation thread (emul_thread) for all PowerPC execution.
    The tick_thread and nvram_thread access disjoint data.

MOAD-0004 (CWE-312): CLEAN
  - No passwords, tokens, credentials, or secrets in the codebase.
  - SheepShaver is a local desktop emulator with no network authentication surface.

MOAD-0005 (Thundering Herd): CLEAN
  - The JIT block cache (my_block_cache) is accessed only from the single emulation thread.
    No concurrent cache-miss race is possible.
  - InterruptFlags uses atomic_or / atomic_and operations (main_unix.cpp:1566-1571).
  - No check+compute+put unsynchronized lazy init patterns found.
