Jan Heiland

40 papers Journal 33Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Sci. Comput.
Davide Pradovera, Ion Victor Gosea, Jan Heiland
2026 J jnl
IEEE Trans. Autom. Control.
Jingjing Zhang, Jan Heiland, Peter Benner, Xin Du
2025 J jnl
J. Syst. Sci. Complex.
Jingjing Zhang, Jan Heiland, Yu-Long Wang
2025 conf
ECC
Jan Heiland, Ion Victor Gosea, Ulrich Römer, Davide Pradovera, Harikrishnan K. Sreekumar, Sabine C. Langer
2025 J jnl
Adv. Comput. Math.
Jan Heiland, Yongho Kim, Steffen W. R. Werner
2025 J jnl
Neural Comput. Appl.
Vipin Kumar, Jan Heiland, Peter Benner
2025 J jnl
J. Comput. Phys.
Jan Heiland, Yongho Kim
2025 J jnl
Syst. Control. Lett.
Anping Tang, Jan Heiland, Guang-Da Hu
2024 J jnl
CoRR
Davide Pradovera, Ion Victor Gosea, Jan Heiland
2024 J jnl
Comput. Math. Appl.
Jan Heiland, Yongho Kim
2024 J jnl
CoRR
Jan Heiland, Yongho Kim, Steffen W. R. Werner
2024 conf
ECC
Ion Victor Gosea, Jan Heiland
2024 conf
ECC
Amritam Das, Jan Heiland
2024 J jnl
CoRR
Pavan L. Veluvali, Jan Heiland, Peter Benner
2024 J jnl
CoRR
Jan Heiland, Yongho Kim
2023 J jnl
Numer. Algorithms
Peter Benner, Jan Heiland, Steffen W. R. Werner
2023 J jnl
CoRR
Yongho Kim, Jan Heiland
2023 J jnl
Neural Process. Lett.
Vipin Kumar, Jan Heiland, Peter Benner
2023 J jnl
CoRR
Jingjing Zhang, Jan Heiland, Peter Benner, Xin Du
2023 J jnl
IEEE Control. Syst. Lett.
Jan Heiland, Steffen W. R. Werner
2023 J jnl
CoRR
Jan Heiland, Steffen W. R. Werner
2023 conf
CoRDI
Pavan L. Veluvali, Jan Heiland, Peter Benner
2023 J jnl
Neural Comput. Appl.
Vipin Kumar, Jan Heiland, Peter Benner
2022 J jnl
Frontiers Appl. Math. Stat.
Jan Heiland, Peter Benner, Rezvan Bahmani
2022 J jnl
Comput. Optim. Appl.
Peter Benner, Jan Heiland, Steffen W. R. Werner
2021 J jnl
CoRR
Peter Benner, Jan Heiland, Steffen W. R. Werner
2021 J jnl
SIAM J. Control. Optim.
Jan Heiland, Enrique Zuazua
2021 J jnl
Appl. Math. Comput.
Maximilian Behr, Peter Benner, Jan Heiland
2021 J jnl
CoRR
Jan Heiland, Benjamin Unger
2020 conf
ECC
Peter Benner, Jan Heiland
2020 J jnl
CoRR
Peter Benner, Pawan Goyal, Jan Heiland, Igor Pontes Duff
2020 conf
ECC
Chayan Bhawal, Jan Heiland, Peter Benner
2020 J jnl
CoRR
Peter Benner, Jan Heiland
2019 J jnl
CoRR
Maximilian Behr, Peter Benner, Jan Heiland
2019 J jnl
CoRR
Henry von Wahl, Thomas Richter, Christoph Lehrenfeld, Jan Heiland, Piotr Minakowski
2018 J jnl
SIAM J. Sci. Comput.
Manuel Baumann, Peter Benner, Jan Heiland
2017 J jnl
CoRR
Maximilian Behr, Peter Benner, Jan Heiland
2017 conf
CDC
Peter Benner, Jan Heiland
2016 J jnl
SIAM J. Control. Optim.
Jan Heiland
2016 J jnl
CoRR
Jörg Fehr, Jan Heiland, Christian Himpe, Jens Saak
redb/extractors/js_extractors/js_content.py
← Index redb/extractors/js_extractors/js_content.py python
"""Persists raw + normalised text into the generic `code_text_content` table.

Reads the raw source and the deobfuscation result directly from the shared
JSContext so no extra compute happens here — both values are computed once
per sample (the source at JSContext construction, the deobfuscation lazily
on first access) and reused by any extractor that needs them.

`text_normalized` is left NULL when the deobfuscation pass produced no
output, so analysts can distinguish "we tried and got nothing" from
"normalisation succeeded".
"""

import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.js_extractor import JSExtractor


class JSContentExtractor(JSExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False, source=None, context=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, source, context=context,
        )
        self.content_row = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.JS_CONTENT.value

    def extract(self):
        src = self.js_source
        if not src:
            return None

        deobfuscated, normalizer_used = self._context.deobfuscated

        self.content_row = {
            "content_type": self._context.content_type,
            "text_raw": src,
            "text_normalized": deobfuscated,  # may be None
            "normalizer_used": normalizer_used,  # may be None
        }
        return self.content_row

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type != "ClickHouseExporter":
            return None
        if not self.content_row:
            return None

        r = self.content_row
        data = [[
            self.sha256,
            r["content_type"],
            r["text_raw"],
            r["text_normalized"],
            r["normalizer_used"],
            datetime.now(timezone.utc),
        ]]

        column_names = [
            "sha256",
            "content_type",
            "text_raw",
            "text_normalized",
            "normalizer_used",
            "analysis_date",
        ]

        column_type_names = [
            "FixedString(64)",
            "LowCardinality(String)",
            "String",
            "Nullable(String)",
            "Nullable(String)",
            "DateTime64(3, 'UTC')",
        ]

        return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "code_text_content"