Maayan Zhitomirsky-Geffet

68 papers A* 1Journal 51Unranked 15
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Data Inf. Sci.
Efrat Miller, Maayan Zhitomirsky-Geffet, Mor Mitrani
2025 J jnl
ACM Journal on Computing and Cultural Heritage
Nati Ben-Gigi, Maayan Zhitomirsky-Geffet, Jonathan Schler, Binyamin Katzoff
2025 conf
ICADL
Yulia Levit, Maayan Zhitomirsky-Geffet, Kfir Pshititsky
2025 conf
ICADL
Sara Minster, Maayan Zhitomirsky-Geffet
2023 J jnl
CoRR
Omri Suissa, Maayan Zhitomirsky-Geffet, Avshalom Elmalech
2023 J jnl
ACM Journal on Computing and Cultural Heritage
Omri Suissa, Maayan Zhitomirsky-Geffet, Avshalom Elmalech
2023 J jnl
Digit. Scholarsh. Humanit.
Avital Zadok, Maayan Zhitomirsky-Geffet, Jonathan Schler, Binyamin Katzoff
2023 J jnl
Digit. Scholarsh. Humanit.
Maayan Zhitomirsky-Geffet, Sara Minster
2023 J jnl
Frontiers Artif. Intell.
Róisín Loughran, Huma Shah, Johanna Monti, Maayan Zhitomirsky-Geffet
2023 J jnl
CoRR
Omri Suissa, Avshalom Elmalech, Maayan Zhitomirsky-Geffet
2023 J jnl
CoRR
Omri Suissa, Maayan Zhitomirsky-Geffet, Avshalom Elmalech
2023 J jnl
Semantic Web
Omri Suissa, Maayan Zhitomirsky-Geffet, Avshalom Elmalech
2023 J jnl
CoRR
Maor Weinberger, Maayan Zhitomirsky-Geffet, Dan Bouhnik
2023 J jnl
CoRR
Omri Suissa, Avshalom Elmalech, Maayan Zhitomirsky-Geffet
2023 J jnl
CoRR
Omri Suissa, Maayan Zhitomirsky-Geffet, Avshalom Elmalech
2023 J jnl
J. Documentation
Maayan Zhitomirsky-Geffet, Inna Kizhner, Sara Minster
2022 J jnl
J. Assoc. Inf. Sci. Technol.
Omri Suissa, Avshalom Elmalech, Maayan Zhitomirsky-Geffet
2022 J jnl
ACM Journal on Computing and Cultural Heritage
Omri Suissa, Maayan Zhitomirsky-Geffet, Avshalom Elmalech
2022 J jnl
Scientometrics
Moshe Blidstein, Maayan Zhitomirsky-Geffet
2022 conf
ASIST
Maayan Zhitomirsky-Geffet
2021 J jnl
Scientometrics
Maor Weinberger, Maayan Zhitomirsky-Geffet
2021 J jnl
CoRR
Omri Suissa, Avshalom Elmalech, Maayan Zhitomirsky-Geffet
2021 J jnl
AI Soc.
Maayan Zhitomirsky-Geffet, Avraham Weic
2020 J jnl
Digit. Humanit. Q.
Gila Prebor, Maayan Zhitomirsky-Geffet, Isaac Miller
2020 J jnl
Digit. Scholarsh. Humanit.
Gila Prebor, Maayan Zhitomirsky-Geffet, Yitzchak Miller
2020 J jnl
J. Documentation
Maayan Zhitomirsky-Geffet, Lala Hajibayova
2020 conf
ASIST
Maor Weinberger, Maayan Zhitomirsky-Geffet, Dan Bouhnik
2020 J jnl
Aslib J. Inf. Manag.
Omri Suissa, Avshalom Elmalech, Maayan Zhitomirsky-Geffet
2020 J jnl
Scientometrics
Maayan Zhitomirsky-Geffet, Ofer Bergman, Shir Hilel
2019 J jnl
Digit. Scholarsh. Humanit.
Maayan Zhitomirsky-Geffet, Gila Prebor
2019 J jnl
J. Documentation
Maayan Zhitomirsky-Geffet
2018 conf
DH
Gila Prebor, Maayan Zhitomirsky-Geffet, Olha Buchel, Dan Bouhnik
2018 J jnl
J. Assoc. Inf. Sci. Technol.
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan, Mark Levene
2018 conf
ASIST
Maayan Zhitomirsky-Geffet, Gila Prebor, Yitzchak Miller
2018 J jnl
AI Soc.
Maayan Zhitomirsky-Geffet, Avital Zadok
2017 conf
ASIST
Gila Prebor, Maayan Zhitomirsky-Geffet, Yitzchak Miller
2017 J jnl
J. Assoc. Inf. Sci. Technol.
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan, Mark Levene
2017 J jnl
Aslib J. Inf. Manag.
Maayan Zhitomirsky-Geffet, Maya Blau
2017 J jnl
Online Inf. Rev.
Maor Weinberger, Maayan Zhitomirsky-Geffet, Dan Bouhnik
2017 J jnl
J. Assoc. Inf. Sci. Technol.
Maayan Zhitomirsky-Geffet, Gila Prebor, Orna Bloch
2017 J jnl
Inf. Res.
Maor Weinberger, Maayan Zhitomirsky-Geffet, Dan Bouhnik
2017 J jnl
J. Assoc. Inf. Sci. Technol.
Maayan Zhitomirsky-Geffet, Eden Shalom Erez, Judit Bar-Ilan
2016 J jnl
Comput. Hum. Behav.
Maayan Zhitomirsky-Geffet, Maya Blau
2016 conf
ASIST
Maayan Zhitomirsky-Geffet, Barbara H. Kwasnik, Julia Bullard, Lala Hajibayova, Juho Hamari, Timothy D. Bowman
2016 J jnl
J. Assoc. Inf. Sci. Technol.
Maayan Zhitomirsky-Geffet, Yair Bratspiess
2016 J jnl
Aslib J. Inf. Manag.
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan, Mark Levene
2016 J jnl
Frontiers Digit. Humanit.
Maayan Zhitomirsky-Geffet, Gila Prebor
2016 conf
DH
Maayan Zhitomirsky-Geffet, Gila Prebor, Amichai Feigenboim
2016 J jnl
Online Inf. Rev.
Esther David, Maayan Zhitomirsky-Geffet, Moshe Koppel, Hodaya Uzan
2016 J jnl
Online Inf. Rev.
Maayan Zhitomirsky-Geffet, Esther David, Moshe Koppel, Hodaya Uzan
2015 conf
ICAART (2)
Hodaya Uzan, Esther David, Moshe Koppel, Maayan Zhitomirsky-Geffet
2015 conf
ASIST
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan, Mark Levene
2015 J jnl
Inf. Res.
Maayan Zhitomirsky-Geffet, Yossi Daya
2015 conf
ASIST
Eden Shalom Erez, Maayan Zhitomirsky-Geffet, Judit Bar-Ilan
2014 J jnl
Online Inf. Rev.
Maayan Zhitomirsky-Geffet, Yigal Maman
2014 conf
DH
Maayan Zhitomirsky-Geffet, Eden Shalom Erez
2014 J jnl
Online Inf. Rev.
Maayan Zhitomirsky-Geffet, Eden Shalom Erez
2014 J jnl
Aslib J. Inf. Manag.
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan
2012 J jnl
Online Inf. Rev.
Judit Bar-Ilan, Maayan Zhitomirsky-Geffet, Yitzchak Miller, Snunith Shoham
2010 J jnl
Online Inf. Rev.
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan, Yitzchak Miller, Snunith Shoham
2010 J jnl
Nat. Lang. Eng.
Lili Kotlerman, Ido Dagan, Idan Szpektor, Maayan Zhitomirsky-Geffet
2010 conf
IIiX
Judit Bar-Ilan, Maayan Zhitomirsky-Geffet, Yitzchak Miller, Snunith Shoham
2010 J jnl
J. Assoc. Inf. Sci. Technol.
Judit Bar-Ilan, Maayan Zhitomirsky-Geffet, Yitzchak Miller, Snunith Shoham
2009 J jnl
Online Inf. Rev.
Maayan Zhitomirsky-Geffet, Dror G. Feitelson, Eitan Frachtenberg, Yair Wiseman
2009 J jnl
Comput. Linguistics
Maayan Zhitomirsky-Geffet, Ido Dagan
2009 conf
ACL/IJCNLP (2)
Lili Kotlerman, Ido Dagan, Idan Szpektor, Maayan Zhitomirsky-Geffet
2008 A* conf
WWW
Maayan Zhitomirsky-Geffet, Judit Bar-Ilan, Yitzchak Miller, Snunith Shoham
2006
Maayan Zhitomirsky-Geffet
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []