Iain A. Matthews

117 papers A* 19A 13B 8C 1Misc 4Journal 36Unranked 35
YearRankTypeTitle / Venue / Authors
2025 conf
SIGGRAPH (Conference Paper Track)
Sarah Taylor, Salvador Medina, Jonathan Windle, Erica Alcusa Sáez, Iain A. Matthews
2024 J jnl
CoRR
Jonathan Windle, Iain A. Matthews, Sarah Taylor
2024 J jnl
Comput. Graph. Forum
Jonathan Windle, Iain A. Matthews, Sarah Taylor
2024 J jnl
CoRR
Tom Wehrbein, Bodo Rosenhahn, Iain A. Matthews, Carsten Stoll
2024 Misc conf
ICASSP
Salvador Medina, Sarah L. Taylor, Carsten Stoll, Gareth Edwards, Alex Hauptmann, Shinji Watanabe, Iain A. Matthews
2024 J jnl
CoRR
Yi Hua, Christoph Lassner, Carsten Stoll, Iain A. Matthews
2023 conf
ICCV (Workshops)
Tom Wehrbein, Bodo Rosenhahn, Iain A. Matthews, Carsten Stoll
2023 B conf
ICMI
Jonathan Windle, Iain A. Matthews, Ben Milner, Sarah Taylor
2022 J jnl
Speech Commun.
Jonathan Windle, Sarah Taylor, David Greenwood, Iain A. Matthews
2022 B conf
IVA
Jonathan Windle, Sarah Taylor, David Greenwood, Iain A. Matthews
2022 A* conf
CVPR
Salvador Medina, Denis Tomè, Carsten Stoll, Mark Tiede, Kevin Munhall, Alex Hauptmann, Iain A. Matthews
2021 A conf
Interspeech
Salvador Medina, Sarah Taylor, Mark Tiede, Alexander G. Hauptmann, Iain A. Matthews
2021 conf
CVMP
Sarah Taylor, Jonathan Windle, David Greenwood, Iain A. Matthews
2020 A* conf
CVPR
Thomas Nestmeyer, Jean-François Lalonde, Iain A. Matthews, Andreas M. Lehrmann
2019 J jnl
IEEE Trans. Affect. Comput.
Rajitha Navarathna, Peter Carr, Patrick Lucey, Iain A. Matthews
2019 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Hanbyul Joo, Tomas Simon, Xulong Li, Hao Liu, Lei Tan, Lin Gui, Sean Banerjee, Timothy Godisart, Bart C. Nabbe, Iain A. Matthews, Takeo Kanade, Shohei Nobuhara, Yaser Sheikh
2019 J jnl
CoRR
Thomas Nestmeyer, Iain A. Matthews, Jean-François Lalonde, Andreas M. Lehrmann
2018 J jnl
Comput. Graph. Forum
Dan Andrei Calian, Jean-François Lalonde, Paulo F. U. Gotardo, Tomas Simon, Iain A. Matthews, Kenny Mitchell
2018 A conf
INTERSPEECH
David Greenwood, Iain A. Matthews, Stephen D. Laycock
2017 J jnl
ACM Trans. Graph.
Sarah L. Taylor, Taehwan Kim, Yisong Yue, Moshe Mahler, James Krahe, Anastasio Garcia Rodriguez, Jessica K. Hodgins, Iain A. Matthews
2017 A* conf
CVPR
Zhiwei Deng, Rajitha Navarathna, Peter Carr, Stephan Mandt, Yisong Yue, Iain A. Matthews, Greg Mori
2017 A* conf
CVPR
Tomas Simon, Hanbyul Joo, Iain A. Matthews, Yaser Sheikh
2017 J jnl
CoRR
Tomas Simon, Hanbyul Joo, Iain A. Matthews, Yaser Sheikh
2017 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Tomas Simon, Jack Valmadre, Iain A. Matthews, Yaser Sheikh
2017 A conf
INTERSPEECH
David Greenwood, Stephen D. Laycock, Iain A. Matthews
2017 B conf
IVA
David Greenwood, Stephen D. Laycock, Iain A. Matthews
2016 A conf
INTERSPEECH
Sarah Taylor, Akihiro Kato, Iain A. Matthews, Ben P. Milner
2016 A conf
IUI
Long Sha, Patrick Lucey, Yisong Yue, Peter Carr, Charlie Rohlf, Iain A. Matthews
2016 J jnl
IEEE Trans. Knowl. Data Eng.
Alina Bialkowski, Patrick Lucey, Peter Carr, Iain A. Matthews, Sridha Sridharan, Clinton Fookes
2016 J jnl
CoRR
Hanbyul Joo, Tomas Simon, Xulong Li, Hao Liu, Lei Tan, Lin Gui, Sean Banerjee, Timothy Godisart, Bart C. Nabbe, Iain A. Matthews, Takeo Kanade, Shohei Nobuhara, Yaser Sheikh
2016 conf
3DV
Steven McDonagh, Martin Klaudiny, Derek Bradley, Thabo Beeler, Iain A. Matthews, Kenny Mitchell
2015 J jnl
Int. J. Comput. Vis.
Hyun Soo Park, Takaaki Shiratori, Iain A. Matthews, Yaser Sheikh
2015 A* conf
KDD
Taehwan Kim, Yisong Yue, Sarah L. Taylor, Iain A. Matthews
2015 Misc conf
ICASSP
Sarah L. Taylor, Barry-John Theobald, Iain A. Matthews
2015 A* conf
ICCV
Hanbyul Joo, Hao Liu, Lei Tan, Lin Gui, Bart C. Nabbe, Iain A. Matthews, Takeo Kanade, Shohei Nobuhara, Yaser Sheikh
2015 A* conf
ICCV
Paulo F. U. Gotardo, Tomas Simon, Yaser Sheikh, Iain A. Matthews
2015 conf
ICCV Workshops
Xinyu Wei, Long Sha, Patrick Lucey, Peter Carr, Sridha Sridharan, Iain A. Matthews
2014 conf
ICDM Workshops
Alina Bialkowski, Patrick Lucey, Peter Carr, Yisong Yue, Sridha Sridharan, Iain A. Matthews
2014 A* conf
ICDM
Alina Bialkowski, Patrick Lucey, Peter Carr, Yisong Yue, Sridha Sridharan, Iain A. Matthews
2014 A* conf
ICDM
Yisong Yue, Patrick Lucey, Peter Carr, Alina Bialkowski, Iain A. Matthews
2014 conf
3DV
Jean-François Lalonde, Iain A. Matthews
2014 A conf
WACV
Rajitha Navarathna, Patrick Lucey, Peter Carr, Elizabeth J. Carter, Sridha Sridharan, Iain A. Matthews
2014 conf
ECCV (3)
Tomas Simon, Jack Valmadre, Iain A. Matthews, Yaser Sheikh
2014 Misc conf
ICASSP
Sarah L. Taylor, Barry-John Theobald, Iain A. Matthews
2013 A* conf
KDD
Patrick Lucey, Dean Oliver, Peter Carr, Joe Roth, Iain A. Matthews
2013 conf
SIGGRAPH Talks
J. Rafael Tena, Moshe Mahler, Thabo Beeler, Hengchin Yeh, Max Grosse, Iain A. Matthews
2013 J jnl
IEEE Computer Graphics and Applications
J. Rafael Tena, Moshe Mahler, Thabo Beeler, Max Grosse, Hengchin Yeh, Iain A. Matthews
2013 A* conf
ACM Multimedia
Peter Carr, Michael N. Mistry, Iain A. Matthews
2013 A* conf
ACM Multimedia
Eric Foote, Peter Carr, Patrick Lucey, Yaser Sheikh, Iain A. Matthews
2013 conf
CVMP
Charalampos Koniaris, Darren Cosker, Xiaosong Yang, Kenny Mitchell, Iain A. Matthews
2013 conf
CVPR Workshops
Alina Bialkowski, Patrick Lucey, Peter Carr, Simon Denman, Iain A. Matthews, Sridha Sridharan
2013 A* conf
CVPR
Patrick Lucey, Alina Bialkowski, Peter Carr, Stuart Morgan, Iain A. Matthews, Yaser Sheikh
2012 J jnl
ACM Trans. Graph.
Ijaz Akhter, Tomas Simon, Sohaib Khan, Iain A. Matthews, Yaser Sheikh
2012 A* conf
AAAI
Patrick Lucey, Alina Bialkowski, Peter Carr, Eric Foote, Iain A. Matthews
2012 conf
Symposium on Computer Animation
Sarah L. Taylor, Moshe Mahler, Barry-John Theobald, Iain A. Matthews
2012 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Sien W. Chew, Patrick Lucey, Simon Lucey, Jason M. Saragih, Jeffrey F. Cohn, Iain A. Matthews, Sridha Sridharan
2012 conf
ECCV (1)
Peter Carr, Yaser Sheikh, Iain A. Matthews
2012 J jnl
Image Vis. Comput.
Patrick Lucey, Jeffrey F. Cohn, Kenneth M. Prkachin, Patricia E. Solomon, Sien W. Chew, Iain A. Matthews
2012 A conf
WACV
Peter Carr, Yaser Sheikh, Iain A. Matthews
2012 J jnl
IEEE Trans. Speech Audio Process.
Barry-John Theobald, Iain A. Matthews
2011 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Patrick Lucey, Jeffrey F. Cohn, Iain A. Matthews, Simon Lucey, Sridha Sridharan, Jessica Howlett, Kenneth M. Prkachin
2011 conf
Symposium on Computer Animation
Natasha Kholgade, Iain A. Matthews, Yaser Sheikh
2011 ch.
Handbook of Face Recognition
Ralph Gross, Simon Baker, Iain A. Matthews, Takeo Kanade
2011 conf
NIPS
Matthew D. Zeiler, Graham W. Taylor, Leonid Sigal, Iain A. Matthews, Rob Fergus
2011 J jnl
ACM Trans. Graph.
J. Rafael Tena, Fernando De la Torre, Iain A. Matthews
2011 J jnl
ACM Trans. Appl. Percept.
Laura C. Trutoiu, Elizabeth J. Carter, Iain A. Matthews, Jessica K. Hodgins
2011 B conf
FG
Patrick Lucey, Jeffrey F. Cohn, Kenneth M. Prkachin, Patricia E. Solomon, Iain A. Matthews
2010 conf
ECCV (3)
Hyun Soo Park, Takaaki Shiratori, Iain A. Matthews, Yaser Sheikh
2010 A* conf
CVPR
Kihwan Kim, Matthias Grundmann, Ariel Shamir, Iain A. Matthews, Jessica K. Hodgins, Irfan A. Essa
2010 J jnl
Image Vis. Comput.
Ralph Gross, Iain A. Matthews, Jeffrey F. Cohn, Takeo Kanade, Simon Baker
2010 J jnl
ACM Trans. Appl. Percept.
Elizabeth J. Carter, Lavanya Sharan, Laura C. Trutoiu, Iain A. Matthews, Jessica K. Hodgins
2010 conf
CVPR Workshops
Patrick Lucey, Jeffrey F. Cohn, Takeo Kanade, Jason M. Saragih, Zara Ambadar, Iain A. Matthews
2009 B conf
ACII
Patrick Lucey, Jeffrey F. Cohn, Simon Lucey, Iain A. Matthews, Sridha Sridharan, Kenneth M. Prkachin
2009 B conf
ACII
Jeffrey F. Cohn, T. S. Kruez, Iain A. Matthews, Ying Yang, Minh Hoai Nguyen, M. T. Padilla, Feng Zhou, Fernando De la Torre
2009 conf
WIAMIS
Timothy R. Brick, Jeffrey R. Spies, Barry-John Theobald, Iain A. Matthews, Steven M. Boker
2008 conf
AVSP
Iain A. Matthews
2008 A conf
INTERSPEECH
Barry-John Theobald, Gavin C. Cawley, J. Andrew Bangham, Iain A. Matthews, Nicholas Wilkinson
2008 A* conf
CVPR
Krishnan Ramnath, Simon Baker, Iain A. Matthews, Deva Ramanan
2008 B conf
FG
Ralph Gross, Iain A. Matthews, Jeffrey F. Cohn, Takeo Kanade, Simon Baker
2008 J jnl
Int. J. Comput. Vis.
Krishnan Ramnath, Seth Koterba, Jing Xiao, Changbo Hu, Iain A. Matthews, Simon Baker, Jeffrey F. Cohn, Takeo Kanade
2008 conf
AVSP
Barry-John Theobald, Nicholas Wilkinson, Iain A. Matthews
2007 J jnl
Int. J. Comput. Vis.
Iain A. Matthews, Jing Xiao, Simon Baker
2007 B conf
ICMI
Barry-John Theobald, Iain A. Matthews, Jeffrey F. Cohn, Steven M. Boker
2006 conf
FGR
Simon Lucey, Iain A. Matthews, Changbo Hu, Zara Ambadar, Fernando De la Torre, Jeffrey F. Cohn
2006 J jnl
Image Vis. Comput.
Ralph Gross, Iain A. Matthews, Simon Baker
2006 conf
FGR
Barry-John Theobald, Iain A. Matthews, Simon Baker
2005 J jnl
Image Vis. Comput.
Ralph Gross, Iain A. Matthews, Simon Baker
2005 A* conf
ICCV
Seth Koterba, Simon Baker, Iain A. Matthews, Changbo Hu, Jing Xiao, Jeffrey F. Cohn, Takeo Kanade
2004 J jnl
Int. J. Comput. Vis.
Iain A. Matthews, Simon Baker
2004 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Ralph Gross, Iain A. Matthews, Simon Baker
2004 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Simon Baker, Iain A. Matthews, Jeff G. Schneider
2004 conf
CVPR Workshops
Ralph Gross, Iain A. Matthews, Simon Baker
2004 A conf
BMVC
Changbo Hu, Jing Xiao, Iain A. Matthews, Simon Baker, Jeffrey F. Cohn, Takeo Kanade
2004 A conf
BMVC
Ralph Gross, Iain A. Matthews, Simon Baker
2004 J jnl
Int. J. Comput. Vis.
Simon Baker, Iain A. Matthews
2004 J jnl
Speech Commun.
Barry-John Theobald, J. Andrew Bangham, Iain A. Matthews, Gavin C. Cawley
2004 conf
CVPR (2)
Jing Xiao, Simon Baker, Iain A. Matthews, Takeo Kanade
2004 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Iain A. Matthews, Takahiro Ishikawa, Simon Baker
2003 A conf
BMVC
Barry-John Theobald, J. Andrew Bangham, Iain A. Matthews, John R. W. Glauert, Gavin C. Cawley
2003 conf
AVSP
Barry-John Theobald, J. Andrew Bangham, Iain A. Matthews, Gavin C. Cawley
2003 conf
ICASSP (5)
Barry-John Theobald, Gavin C. Cawley, Iain A. Matthews, J. Andrew Bangham
2003 A conf
BMVC
Iain A. Matthews, Takahiro Ishikawa, Simon Baker
2002 conf
FGR
Ralph Gross, Iain A. Matthews, Simon Baker
2002 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Iain A. Matthews, Timothy F. Cootes, J. Andrew Bangham, Stephen J. Cox, Richard W. Harvey
2002 conf
DAGM-Symposium
Ralph Gross, Iain A. Matthews, Simon Baker
2002 Misc conf
ICASSP
Barry-John Theobald, J. Andrew Bangham, Iain A. Matthews, Gavin C. Cawley
2001 A conf
ICME
Iain A. Matthews, Gerasimos Potamianos, Chalapathy Neti, Juergen Luettin
2001 conf
CVPR (1)
Simon Baker, Iain A. Matthews
2001 C conf
MMSP
Chalapathy Neti, Gerasimos Potamianos, Juergen Luettin, Iain A. Matthews, Hervé Glotin, Dimitra Vergyri
2001 A* conf
ICCV
Naoya Takao, Jianbo Shi, Simon Baker, Iain A. Matthews, Bart C. Nabbe
2001 conf
AVSP
Barry-John Theobald, J. Andrew Bangham, Iain A. Matthews, Gavin C. Cawley
1998 conf
ECCV (2)
Iain A. Matthews, J. Andrew Bangham, Richard W. Harvey, Stephen J. Cox
1998 conf
AVSP
Iain A. Matthews, Timothy F. Cootes, Stephen J. Cox, Richard W. Harvey, J. Andrew Bangham
1998 conf
EUSIPCO
Iain A. Matthews, J. Andrew Bangham, Richard W. Harvey, Stephen J. Cox
1997 conf
AVSP
Stephen J. Cox, Iain A. Matthews, J. Andrew Bangham
1997 A* conf
CVPR
Richard W. Harvey, Iain A. Matthews, J. Andrew Bangham, Stephen J. Cox
1996 conf
ICSLP
Iain A. Matthews, J. Andrew Bangham, Stephen J. Cox
sql/redb_js_tables.sql
← Index sql/redb_js_tables.sql sql
-- JavaScript malware analysis tables
-- Engine: ReplacingMergeTree(analysis_date) — latest analysis wins on re-processing
--
-- File order:
--   1. redb_js_features
--   2. redb_js_suspicious_apis
--   3. redb_js_deobfuscation
--   4. code_text_content              (generic text-content table; JS today,
--                                      PowerShell / Python / email / extracted
--                                      PDF / Office text in the future)
--   5. redb_iocs source_type ALTER    (extends Enum8 with text_raw/text_normalized
--                                      so JS — and any future text-based pipeline —
--                                      can distinguish IOCs found in the raw vs
--                                      normalised surface)
--   6. redb_iocs ioc_type ALTER       (adds registry_key=42 so HKLM/HKCU/HKEY_*
--                                      keys are extracted alongside file paths)
--
-- Decoded strings from JS still go into the shared code_binja_strings_raw
-- table (same schema used by DecompileBinja and DecompileAPK). JS
-- string_encoding values: hex, unicode, charcode, base64, concat. Plain long
-- literals are not extracted here — they're already in code_text_content and
-- scraped by the IOC pipeline over text_raw/text_normalized.
-- string_offset is the line number in the source file.
--
-- redb_js_features.script_type values (file format / container, first match):
--   jse, wsf, hta, embedded_html, wscript, esm, node_module, standalone, unknown
-- redb_js_features.detected_environment values (runtime by API surface, first
-- match):
--   wscript, browser_extension, service_worker, deno, node, browser, unknown

-- 1. Core features & obfuscation metrics (1 row per sample)
CREATE TABLE IF NOT EXISTS redb_js_features (
    sha256 FixedString(64),
    line_count UInt32,
    char_count UInt64,
    text_entropy Float64,
    max_line_length UInt32,
    avg_line_length Float64,
    is_minified UInt8,
    is_likely_obfuscated UInt8,
    obfuscator_name LowCardinality(String),
    obfuscation_score UInt8,
    obfuscation_techniques Array(String),
    eval_count UInt32,
    function_constructor_count UInt32,
    settimeout_setinterval_count UInt32,
    document_write_count UInt32,
    innerhtml_count UInt32,
    unescape_count UInt32,
    fromcharcode_count UInt32,
    atob_count UInt32,
    decodeuri_count UInt32,
    total_function_count UInt32,
    total_variable_count UInt32,
    max_nesting_depth UInt16,
    avg_identifier_length Float64,
    hex_string_count UInt32,
    unicode_escape_count UInt32,
    long_string_count UInt32,
    base64_string_count UInt32,
    comment_ratio Float64,
    script_type LowCardinality(String),
    detected_environment LowCardinality(String),
    analysis_date DateTime64(3, 'UTC')
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY sha256;

-- 2. Suspicious API calls (multi-row per sample)
--
-- `revealed_by_deobf` is 1 when the API only appears after the deobfuscation
-- pass (i.e. the call site is hidden in the raw artefact and surfaces only in
-- text_normalized). Useful for filtering "what did normalisation actually
-- buy us" without re-running the diff.
CREATE TABLE IF NOT EXISTS redb_js_suspicious_apis (
    sha256 FixedString(64),
    api_name String,
    api_category LowCardinality(String),
    call_count UInt32,
    line_numbers Array(UInt32),
    context_snippet String,
    revealed_by_deobf UInt8,
    analysis_date DateTime64(3, 'UTC')
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY (sha256, api_name);

-- 3. Deobfuscation results (1 row per sample)
CREATE TABLE IF NOT EXISTS redb_js_deobfuscation (
    sha256 FixedString(64),
    deobfuscator_used LowCardinality(String),
    deobfuscation_successful UInt8,
    original_size UInt64,
    deobfuscated_size UInt64,
    size_change_ratio Float64,
    original_entropy Float64,
    deobfuscated_entropy Float64,
    new_strings_found UInt32,
    new_apis_found UInt32,
    deobfuscated_sha256 FixedString(64),
    analysis_date DateTime64(3, 'UTC')
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY sha256;

-- 4. Generic text-content table for any text-based artefact (JS today;
--    PowerShell, Python, plain text, email bodies, extracted PDF/Office text
--    in the future). One row per sha256. content_type carries the magika
--    label so callers can filter without joining other tables.
CREATE TABLE IF NOT EXISTS code_text_content (
    sha256 FixedString(64),
    content_type LowCardinality(String),
    text_raw String CODEC(ZSTD(3)),
    text_normalized Nullable(String) CODEC(ZSTD(3)),
    normalizer_used Nullable(String),
    analysis_date DateTime64(3, 'UTC')
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY sha256;

-- 5. Extend redb_iocs.source_type Enum8 with two universal text-content
--    surfaces: text_raw (the artefact's original text) and text_normalized
--    (a deobfuscated/canonicalised form). Used by the JS IOC extraction
--    pipeline today; any future text-based pipeline (PowerShell, PDF, etc.)
--    plugs into the same two values.
--
-- Existing rows keep their stored integer values; only newly-inserted rows
-- can use 4/5. The MODIFY COLUMN must list the full final enum, including
-- the existing values (1/2/3) — ClickHouse rejects partial alters.
ALTER TABLE redb_iocs
    MODIFY COLUMN source_type
    Enum8('decompiled_function'=1, 'disassembled_function'=2, 'string'=3,
          'text_raw'=4, 'text_normalized'=5);

-- 6. Extend redb_iocs.ioc_type Enum8 with registry_key=42. Windows registry
--    paths (HKLM\..., HKCU\..., HKEY_LOCAL_MACHINE\...) are a distinct class
--    of IOC from filesystem paths and were previously extracted by nothing.
--    Same MODIFY COLUMN constraint as the source_type alter — the full final
--    enum must be listed.
ALTER TABLE redb_iocs
    MODIFY COLUMN ioc_type
    Enum8('ipv4'=1, 'ipv6'=2, 'fqdn'=3, 'url'=4, 'email'=5, 'server'=6,
          'hash_md5'=10, 'hash_sha1'=11, 'hash_sha256'=12,
          'cve'=20, 'cwe'=21, 'cpe'=22,
          'crypto_btc'=30, 'crypto_eth'=31, 'crypto_xrp'=32, 'crypto_bch'=33,
          'crypto_ada'=34, 'crypto_substrate'=35,
          'path_linux'=40, 'path_windows'=41, 'registry_key'=42,
          'onion'=50);

-- 7. Migrate redb_js_features to the two-tier obfuscation verdict.
--    `is_obfuscated` (binary heuristic at score >=40) is renamed to
--    `is_likely_obfuscated` (heuristic at >=60 + ≥1 strong signal, OR
--    js-x-ray flagged the obfuscator family). `obfuscator_name` is the
--    family name reported by @nodesecure/js-x-ray (jsfuck, obfuscator.io,
--    morse, jjencode, freejsobfuscator, ...) or empty when not detected.
--
--    Run once against an existing deployment. The CREATE TABLE above
--    already reflects the post-migration shape, so fresh installs skip this.
ALTER TABLE redb_js_features
    RENAME COLUMN is_obfuscated TO is_likely_obfuscated;
ALTER TABLE redb_js_features
    ADD COLUMN IF NOT EXISTS obfuscator_name LowCardinality(String) AFTER is_likely_obfuscated;

-- 8. Harmonise code_text_content column names with redb_iocs.source_type
--    enum values. The enum already uses `text_raw` / `text_normalized` for
--    the surface labels; the table previously stored the same data under
--    `content_raw` / `content_normalized`, forcing every join across the two
--    to translate names. Renaming the columns produces a self-documenting
--    schema where `redb_iocs.source_type='text_raw'` points directly at
--    `code_text_content.text_raw`.
--
--    Run once against an existing deployment. The CREATE TABLE above
--    already reflects the post-migration shape, so fresh installs skip this.
ALTER TABLE code_text_content
    RENAME COLUMN content_raw TO text_raw;
ALTER TABLE code_text_content
    RENAME COLUMN content_normalized TO text_normalized;

-- 9. Add revealed_by_deobf flag to redb_js_suspicious_apis. The strings/APIs
--    extractors now scan both the raw source and the deobfuscated text so APIs
--    hidden behind one obfuscation layer (Vjw0rm-style array.join + eval,
--    Dean-Edwards packers, ...) surface in the table. The flag is 1 only when
--    the API was *not* found in the raw source — querying for it isolates
--    "deobf-only" findings without joining redb_js_deobfuscation.
--
--    Run once against an existing deployment. The CREATE TABLE above
--    already reflects the post-migration shape, so fresh installs skip this.
ALTER TABLE redb_js_suspicious_apis
    ADD COLUMN IF NOT EXISTS revealed_by_deobf UInt8 AFTER context_snippet;