llvm/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.py

import logging


class FailOncePlugin(AsanSymbolizerPlugIn):
    """
    This is a simple plug-in that always claims
    that a binary can't be symbolized on the first
    call but succeeds for all subsequent calls.

    This plug-in exists to reproduce an old bug
    in the `asan_symbolize.py` script.

    By failing the first symbolization request
    we used to cause an early exit in `asan_symbolize.py`
    that didn't increment the frame counter which
    caused subsequent symbolization attempts to
    print the wrong frame number.
    """

    def __init__(self):
        self.should_fail = True
        pass

    def filter_binary_path(self, path):
        logging.info("filter_binary_path called in NoOpPlugin")
        if self.should_fail:
            logging.info("Doing first fail")
            self.should_fail = False
            return None
        logging.info("Doing succeed")
        return path


register_plugin(FailOncePlugin())