Oliver Heirich

24 papers A* 1B 1C 6Journal 4Unranked 12
YearRankTypeTitle / Venue / Authors
2025 conf
PLANS
Susanna Kaiser, Stephan Sand, Umut Guloglu, Oliver Heirich, Thomas Wiedemann
2024 conf
PerCom Workshops
Thomas Strang, Andreas Lehner, Oliver Heirich, Benjamin Siebler, Stephan Sand
2023 conf
PLANS
Florian Rößl, Omar García Crespillo, Oliver Heirich, Ana Kliman
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Miguel A. Bellido-Manganell, Thomas Gräupl, Oliver Heirich, Nils Mäurer, Alexandra Filip-Dhaubhadel, Daniel M. Mielke, Lukas Marcel Schalk, Dennis Becker, Nicolas Schneckenburger, Michael Schnell
2021 conf
VTC Fall
Stephan Sand, Paul Unterhuber, Dina Bousdar Ahmed, Fabian de Ponte Müller, Andreas Lehner, Ibrahim Rashdan, Martin Schmidhammer, Rostislav Karásek, Benjamin Siebler, Oliver Heirich, Christian Gentner, Michael Walter, Susanna Kaiser, Markus Ulmschneider, Marius Schaab, Luis Wientgens, Thomas Strang
2020 conf
PLANS
Benjamin Siebler, Oliver Heirich, Stephan Sand, Uwe D. Hanebeck
2020 conf
ENC
Oliver Heirich, Benjamin Siebler, Stephan Sand, Andreas Lehner, Omar García Crespillo
2018 conf
PLANS
Benjamin Siebler, Oliver Heirich, Stephan Sand
2018 C conf
FUSION
Benjamin Siebler, Oliver Heirich, Stephan Sand
2017 conf
ICL-GNSS
Benjamin Siebler, Fabian de Ponte Müller, Oliver Heirich, Stephan Sand
2017 J jnl
J. Sensors
Oliver Heirich, Benjamin Siebler, Erik L. Hedberg
2016 J jnl
J. Sensors
Oliver Heirich
2015 conf
VTC Fall
Dina Bousdar Ahmed, Korbinian Frank, Oliver Heirich
2015 conf
I2MTC
Oliver Heirich, Benjamin Siebler
2013 C conf
IPIN
Mohammed Khider, Patrick Robertson, Martin Frassl, Michael Angermann, Luigi Bruno, Maria Garcia Puyol, Estefania Munoz Diaz, Oliver Heirich
2013 J jnl
J. Locat. Based Serv.
Maria Garcia Puyol, Patrick Robertson, Oliver Heirich
2013 C conf
IPIN
Estefania Munoz Diaz, Oliver Heirich, Mohammed Khider, Patrick Robertson
2013 A* conf
ICRA
Oliver Heirich, Patrick Robertson, Thomas Strang
2013 C conf
FUSION
Oliver Heirich, Alexander Steingass, Andreas Lehner, Thomas Strang
2012 C conf
FUSION
Oliver Heirich, Patrick Robertson, Adrián Cardalda García, Thomas Strang
2012 C conf
IPIN
Maria Garcia Puyol, Patrick Robertson, Oliver Heirich
2012 B conf
Intelligent Vehicles Symposium
Oliver Heirich, Patrick Robertson, Adrián Cardalda García, Thomas Strang, Andreas Lehner
2011 conf
Nets4Cars/Nets4Trains
Andreas Lehner, Cristina Rico Garcia, Thomas Strang, Oliver Heirich
2011 conf
ITSC
Oliver Heirich, Andreas Lehner, Patrick Robertson, Thomas Strang
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