Rajneesh Suri

12 papers Unranked 12
YearRankTypeTitle / Venue / Authors
2021 conf
AHFE (1)
Yigit Topoglu, Jan Watson, Jintao Zhang, Hongjun Ye, Rajneesh Suri, Hasan Ayaz
2021 conf
AHFE (1)
Adrian Curtin, Jan Watson, Yigit Topoglu, Nicholas DeFilippis, Hongjun Ye, Rajneesh Suri, Hasan Ayaz
2021 conf
AHFE (1)
Jan Watson, Hongjun Ye, Jintao Zhang, Yigit Topoglu, Rajneesh Suri, Hasan Ayaz
2020 conf
AHFE (1)
Yigit Topoglu, Amanda Sargent, Jan Watson, Hongjun Ye, Rajneesh Suri, Hasan Ayaz
2020 conf
AHFE (1)
Jan Watson, Amanda Sargent, Yigit Topoglu, Hongjun Ye, Rajneesh Suri, Hasan Ayaz
2019 conf
AHFE (2)
Amanda Sargent, Jan Watson, Yigit Topoglu, Hongjun Ye, Wenting Zhong, Rajneesh Suri, Hasan Ayaz
2019 conf
AHFE (2)
Yigit Topoglu, Jan Watson, Rajneesh Suri, Hasan Ayaz
2019 conf
AHFE (2)
Amanda Sargent, Jan Watson, Yigit Topoglu, Hongjun Ye, Wenting Zhong, Hasan Ayaz, Rajneesh Suri
2019 conf
AHFE (2)
Hongjun Ye, Haeyoung Jeong, Wenting Zhong, Siddharth Bhatt, Kurtulus Izzetoglu, Hasan Ayaz, Rajneesh Suri
2019 conf
AHFE (2)
Hongjun Ye, Siddharth Bhatt, Wenting Zhong, Jan Watson, Amanda Sargent, Yigit Topoglu, Hasan Ayaz, Rajneesh Suri
2019 conf
AHFE (2)
Hongjun Ye, Siddharth Bhatt, Wenting Zhong, Jan Watson, Amanda Sargent, Yigit Topoglu, Hasan Ayaz, Rajneesh Suri
2019 conf
AHFE (2)
Jan Watson, Amanda Sargent, Yigit Topoglu, Hongjun Ye, Wenting Zhong, Rajneesh Suri, Hasan Ayaz
tests/unit/test_decompile_function_type.py
← Index tests/unit/test_decompile_function_type.py python
"""Unit tests for bninja/function_type.py."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import install_binja_stubs, SymbolType
install_binja_stubs()

from redb.extractors.decompiler.bninja.function_type import (
    FunctionType,
    FunctionTypeAnalysis,
)


# ============================================================================
# 4a. FunctionType / FunctionTypeAnalysis
# ============================================================================


class TestFunctionTypeEnum:
    def test_function_type_enum_values(self):
        assert FunctionType.USER.value == "USER"
        assert FunctionType.LIBRARY.value == "LIBRARY"
        assert FunctionType.EXTERNAL.value == "EXTERNAL"
        assert FunctionType.THUNK.value == "THUNK"
        assert FunctionType.UNKNOWN.value == "UNKNOWN"


class TestFunctionTypeAnalysis:
    def _make_function(self, symbol_type=None, is_thunk=False, raise_on_symbol=False):
        func = MagicMock()
        func.is_thunk = is_thunk
        if raise_on_symbol:
            type(func).symbol = property(lambda self: (_ for _ in ()).throw(Exception("no symbol")))
        else:
            func.symbol.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        return func

    def test_user_function_type(self):
        func = self._make_function(symbol_type=SymbolType.FunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.USER

    def test_external_function_type(self):
        func = self._make_function(symbol_type=SymbolType.ImportedFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.EXTERNAL

    def test_library_function_type(self):
        func = self._make_function(symbol_type=SymbolType.LibraryFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.LIBRARY

    def test_thunk_function_type(self):
        # Thunk overrides the symbol type
        func = self._make_function(
            symbol_type=SymbolType.FunctionSymbol, is_thunk=True
        )
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.THUNK

    def test_exception_returns_unknown(self):
        func = self._make_function(raise_on_symbol=True)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.UNKNOWN