Irene Posch

21 papers A* 1A 3B 3Misc 3Journal 2Unranked 9
YearRankTypeTitle / Venue / Authors
2025 conf
CHI Extended Abstracts
Kaori Ueda, Bine Roth, Laura Devendorf, Kristina Andersen, Irene Posch
2024 conf
MuC (Workshopband)
Sabrina Burtscher, Kay Kender, Janis Lena Meissner, Irene Posch, Angelika Strohmayer
2024 A conf
Conference on Designing Interactive Systems
Elizabeth Meiklejohn, Laura Devendorf, Irene Posch
2024 A conf
Conference on Designing Interactive Systems (Companion Volume)
Kristina Andersen, Bruna Goveia da Rocha, Laura Devendorf, Elvia Vasconcelos, Lee Jones, Irene Posch, Anuradha Venugopal Reddy, Aisling Kelliher, Verena Fuchsberger, Lone Koefoed Hansen, Etta Sandry
2022 B conf
TEI
Hannah Perner-Wilson, Irene Posch
2022 conf
PDC (2)
Angelika Strohmayer, Laura Cortés-Rico, Tania Pérez-Bustos, Afroditi Psarra, Daniela K. Rosner, Özge Subasi, Irene Posch, Sara Nabil, Jihan Sherman
2021 B conf
TEI
Irene Posch
2021 J jnl
ACM Trans. Comput. Hum. Interact.
Irene Posch, Geraldine Fitzpatrick
2020 A conf
Conference on Designing Interactive Systems (Companion Volume)
Irene Posch
2019 A* conf
CHI
Christopher Frauenberger, Katta Spiel, Laura Scheepmaker, Irene Posch
2019 conf
CHI Extended Abstracts
Irene Posch, Özge Subasi, Daniela K. Rosner, Raune Frankjaer, Amit Zoran, Tania Pérez-Bustos
2019 Misc conf
UbiComp
Irene Posch, Liza Stark, Geraldine Fitzpatrick
2018 B conf
TEI
Irene Posch, Geraldine Fitzpatrick
2017 conf
CHI Extended Abstracts
Irene Posch
2017 J jnl
Interactions
Irene Posch
2016 conf
CHI Extended Abstracts
Irene Posch, Ebru Kurbak
2014 conf
ISWC Adjunct
Anja Hertenberger, Jie Qi, Meg Grant, Barbro Scholz, Katharina Childs, Melissa Coleman, Beam Contrechoc, Kristi Kuusk, Mika Satomi, Becky Stewart, Lynsey Calder, Mili Tharakan, Ebru Kurbak, Marina Toeters, Pauline Vierne, Hannah Perner-Wilson, Marta Kisand, Sara Robertson, Irene Posch, Martijn ten Bhömer, Sarah Taylor, Isabel Cabral, Maurin Donneaud, Troy Robert Nachtigall
2013 conf
IS-EUD
Alexander Boden, Gabriela Avram, Irene Posch, Volkmar Pipek, Geraldine Fitzpatrick
2012 Misc conf
OZCHI
Irene Posch, Geraldine Fitzpatrick
2011 conf
Mobile HCI
Irene Posch, Jona Hoier
2010 Misc conf
IDC
Irene Posch, Hideaki Ogawa, Christopher Lindinger, Roland Haring, Horst Hörtner
tests/unit/test_decompile_strings.py
← Index tests/unit/test_decompile_strings.py python
"""Unit tests for bninja/analysis/strings.py — StringAnalysis."""
import pytest
import math
from unittest.mock import MagicMock


# StringAnalysis has no binaryninja imports, just collections and math
from redb.extractors.decompiler.bninja.analysis.strings import StringAnalysis


# ============================================================================
# Helper mocks
# ============================================================================

class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, type_name="Utf8String"):
        self.value = value
        self.raw = raw if raw is not None else (value.encode("utf-8") if isinstance(value, str) else value)
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = MagicMock()
        self.type.name = type_name


class MockBinaryView:
    """Mock binary view with a strings list."""
    def __init__(self, strings=None):
        self.strings = strings or []


# ============================================================================
# 6a. StringAnalysis
# ============================================================================


class TestStringAnalysisEntropy:
    def setup_method(self):
        self.sa = StringAnalysis(bv=MockBinaryView(), functions=[])

    def test_entropy_empty_string(self):
        assert self.sa.entropy("") == 0.0

    def test_entropy_single_char(self):
        assert self.sa.entropy("aaaa") == 0.0

    def test_entropy_uniform_distribution(self):
        # "abcd" -> 4 unique chars, each p=1/4, entropy = log2(4) = 2.0
        result = self.sa.entropy("abcd")
        assert result == pytest.approx(2.0)

    def test_entropy_binary_string(self):
        # "ab" -> 2 unique chars, each p=1/2, entropy = log2(2) = 1.0
        result = self.sa.entropy("ab")
        assert result == pytest.approx(1.0)


class TestStringAnalysisAnalyze:
    def test_analyze_deduplication(self):
        """Duplicate (string, encoding) pairs -> only first kept."""
        entries = [
            MockStringEntry("hello", start=100, type_name="Utf8String"),
            MockStringEntry("hello", start=200, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        assert result[0]["string_offset"] == 100

    def test_analyze_sorted_by_address(self):
        """First occurrence (lowest offset) is the one kept."""
        entries = [
            MockStringEntry("world", start=500, type_name="Utf8String"),
            MockStringEntry("world", start=100, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        # The analyze() sorts by start, so 100 comes first
        assert result[0]["string_offset"] == 100

    def test_analyze_empty_bv(self):
        bv = MockBinaryView(strings=[])
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert result == []

    def test_analyze_output_schema(self):
        entries = [MockStringEntry("test_string", start=0, type_name="Utf8String")]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        r = result[0]
        required_keys = [
            "string",
            "string_raw",
            "string_encoding",
            "string_offset",
            "string_length",
            "string_raw_length",
            "string_entropy",
        ]
        for key in required_keys:
            assert key in r, f"Missing key: {key}"