Manh-Hung Ha

25 papers C 4Journal 12Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
Eng. Appl. Artif. Intell.
Truong-Thang Nguyen, Viet-Hung Dang, Ngoc-Son Vu, Manh-Hung Ha, Xuan-Dat Pham
2025 J jnl
EAI Endorsed Trans. Ind. Networks Intell. Syst.
Manh-Tuan Do, Manh-Hung Ha, Minh-Huy Le, Oscal Tzyh-Chiang Chen
2025 J jnl
IEEE Access
Oscal Tzyh-Chiang Chen, Yu-Xuan Chang, Chih-Yu Chung, Ya-Yun Cheng, Manh-Hung Ha
2025 J jnl
Frontiers Comput. Sci.
Manh-Tuan Do, Manh-Hung Ha, Duc-Chinh Nguyen, Oscal Tzyh-Chiang Chen
2024 C conf
ISCAS
Oscal T.-C. Chen, Cheng-Hong Tsai, Manh-Hung Ha
2024 J jnl
Appl. Intell.
Truong-Thang Nguyen, Viet-Hung Dang, Manh-Hung Ha, Thanh-Tung Pham, Quang-Minh Phan
2024 J jnl
EAI Endorsed Trans. Ind. Networks Intell. Syst.
Manh-Hung Ha, Duc-Chinh Nguyen, Long Quang Chan, Oscal T. C. Chen
2024 J jnl
CoRR
Quang-Anh N. D., Manh-Hung Ha, Thai Kim Dinh, Minh-Duc Pham, Ninh Nguyen Van
2024 C conf
VCIP
Duc-Chinh Nguyen, Manh-Hung Ha, Manh-Tuan Do, Oscal Tzyh-Chiang Chen
2024 conf
ICFSP
Manh-Tuan Do, Manh-Hung Ha, Duc-Chinh Nguyen, Oscal Tzyh-Chiang Chen
2023 J jnl
IEEE Access
Thai Dinh Kim, Dung Manh Do, Duy Hoang, Thanh Ngoc Pham, Manh-Hung Ha, Hai Xuan Le
2023 conf
RIVF
Manh-Tien Nguyen, Thai Dinh Kim, Manh-Hung Ha, Do Anh Luyen, Lan-Anh Nguyen, Dieu-Linh Ngo
2023 conf
RIVF
Manh-Tuan Do, Thai Dinh Kim, Manh-Hung Ha, Oscal Tzyh-Chiang Chen, Duc-Chinh Nguyen, Anh Long Quang Tran
2023 conf
RIVF
Oscal T.-C. Chen, Yu-Wei Jhao, Chih-Yu Chung, Yue-Han Li, Manh-Hung Ha
2023 conf
ICSSE
Manh-Tuan Do, Manh-Hung Ha, Duc-Chinh Nguyen, Kim Thai, Quang-Huy Do Ba
2023 conf
ICSSE
Manh-Hung Ha, Do Anh Luyen, Oscal Tzyh-Chiang Chen, Truong Cong Doan, Nguyen Van Tinh
2023 conf
SSP
Manh-Hung Ha, Oscal Tzyh-Chiang Chen
2023 conf
ICSSE
Hai-Binh Le, Thai Dinh Kim, Manh-Hung Ha, Anh Long Quang Tran, Duy-Thuc Nguyen, Xuan-Minh Dinh
2022 conf
ICME Workshops
Manh-Hung Ha, Oscal Tzyh-Chiang Chen
2021 C conf
VCIP
Manh-Hung Ha, Oscal Tzyh-Chiang Chen
2021 J jnl
IEEE Access
Manh-Hung Ha, Oscal Tzyh-Chiang Chen
2021 J jnl
IEEE Access
Manh-Hung Ha, Oscal Tzyh-Chiang Chen
2020 J jnl
Adv. Eng. Softw.
Viet-Hung Truong, Quang-Viet Vu, Huu-Tai Thai, Manh-Hung Ha
2020 C conf
ISCAS
Oscal Tzyh-Chiang Chen, Manh-Hung Ha, Yi Lun Lee
2020 J jnl
Adv. Eng. Softw.
Manh-Hung Ha, Quang-Viet Vu, Viet-Hung Truong
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