Warren A. Kibbe

28 papers C 1Misc 3Journal 23Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Am. Medical Informatics Assoc.
Kellie M. Walters, Marshall Clark, Sofia Dard, Stephanie S. Hong, Elizabeth Kelly, Kristin Kostka, Adam M. Lee, Robert T. Miller, Michele Morris, Matvey B. Palchuk, Emily R. Pfaff, Adam B. Wilcox, Alexis Graves, Alfred (Jerrod) Anzalone, Amin Manna, Amit Saha, Amy Olex, Andrea Zhou, Andrew E. Williams, Andrew Southerland, Andrew T. Girvin, Anita Walden, Anjali A Sharathkumar, Benjamin R. C. Amor, Benjamin Bates, Brian Hendricks, Brijesh Patel, Caleb Alexander, Carolyn T. Bramante, Cavin Ward-Caviness, Charisse R. Madlock-Brown, Christine Suver, Christopher G. Chute, Christopher Dillon, Chunlei Wu, Clare Schmitt, Cliff Takemoto, Dan Housman, Davera Gabriel, David A. Eichmann, Diego Mazzotti, Don Brown, Eilis Boudreau, Elaine L. Hill, Elizabeth Zampino, Emily Carlson Marti, Evan French, Farrukh M. Koraishy, Federico Mariona, Fred W. Prior, George Sokos, Greg Martin, Harold P. Lehmann, Heidi Spratt, Hemalkumar Mehta, Hongfang Liu, Hythem Sidky, J. W. Awori Hayanga, Jami Pincavitch, Jaylyn Clark, Jeremy Richard Harper, Jessica Islam, Jin Ge, Joel Gagnier, Joel H. Saltz, Johanna Loomba, John Buse, Jomol P. Mathew, Joni L. Rutter, Julie A. McMurry, Justin Guinney, Justin Starren, Karen Crowley, Katie Rebecca Bradwell, Ken Wilkins, Kenneth R. Gersing, Kenrick Dwain Cato, Kimberly Murray, Lavance Northington, Lee Allan Pyles, Leonie Misquitta, Lesley Cottrell, Lili M. Portilla, Mariam Deacy, Mark M. Bissell, Mary Emmett, Mary Morrison Saltz, Melissa A. Haendel, Meredith C. B. Adams, Meredith Temple-O'Connor, Michael G. Kurilla, Nabeel Qureshi, Nasia Safdar, Nicole Garbarini, Noha Sharafeldin, Ofer Sadan, Patricia A. Francis, Penny Wung Burgoon, Peter N. Robinson, Philip R. O. Payne, Rafael Fuentes, Randeep Jawa, Rebecca Erwin-Cohen, Rena Patel, Richard A. Moffitt, Richard L. Zhu, Rishi Kamaleswaran, Robert Hurley, Saiju Pyarajan, Sam G. Michael, Samuel Bozzette, Sandeep Mallipattu, Satyanarayana Vedula, Scott Chapman, Shawn T. O'Neil, Soko Setoguchi, Steve Johnson, Tellen D. Bennett, Tiffany Callahan, Umit Topaloglu, Usman Sheikh, Valery Gordon, Vignesh Subbian, Warren A. Kibbe, Wenndy Hernandez, Will Beasley, Will Cooper, William Hillegass, Xiaohan Tanner Zhang
2022 J jnl
J. Am. Medical Informatics Assoc.
Jason A. Thomas, Randi E. Foraker, Noa Zamstein, Jon D. Morrow, Philip R. O. Payne, Adam B. Wilcox, Melissa A. Haendel, Christopher G. Chute, Kenneth R. Gersing, Anita Walden, Tellen D. Bennett, David A. Eichmann, Justin Guinney, Warren A. Kibbe, Hongfang Liu, Emily R. Pfaff, Peter N. Robinson, Joel H. Saltz, Heidi Spratt, Justin Starren, Christine Suver, Chunlei Wu, Davera Gabriel, Stephanie S. Hong, Kristin Kostka, Harold P. Lehmann, Richard A. Moffitt, Michele Morris, Matvey B. Palchuk, Xiaohan Tanner Zhang, Richard L. Zhu, Benjamin R. C. Amor, Mark M. Bissell, Marshall Clark, Andrew T. Girvin, Adam M. Lee, Robert T. Miller, Kellie M. Walters, Yooree Chae, Connor Cook, Alexandra Dest, Racquel R. Dietz, Thomas Dillon, Patricia A. Francis, Rafael Fuentes, Alexis Graves, Andrew J. Neumann, Shawn T. O'Neil, Usman Sheikh, Andréa M. Volz, Elizabeth Zampino, Christopher P. Austin, Samuel Bozzette, Mariam Deacy, Nicole Garbarini, Michael G. Kurilla, Sam G. Michael, Joni L. Rutter, Meredith Temple-O'Connor, Katie Rebecca Bradwell, Amin Manna, Nabeel Qureshi, Mary Morrison Saltz, Julie A. McMurry, Carolyn T. Bramante, Jeremy Richard Harper, Wenndy Hernandez, Farrukh M. Koraishy, Federico Mariona, Saidulu Mattapally, Amit Saha, Satyanarayana Vedula, Yujuan Fu, Nisha Mathews, Ofer Mendelevitch
2022 J jnl
J. Am. Medical Informatics Assoc.
Gabriel A. Carrillo, Michael Cohen-Wolkowiez, Emily M. D'agostino, Keith Marsolo, Lisa M. Wruck, Laura Johnson, James Topping, Al Richmond, Giselle Corbie, Warren A. Kibbe
2021 J jnl
npj Digit. Medicine
Brinnae Bent, Oana M. Enache, Benjamin Goldstein, Warren A. Kibbe, Jessilyn Dunn
2021 J jnl
J. Am. Medical Informatics Assoc.
Melissa A. Haendel, Christopher G. Chute, Tellen D. Bennett, David A. Eichmann, Justin Guinney, Warren A. Kibbe, Philip R. O. Payne, Emily R. Pfaff, Peter N. Robinson, Joel H. Saltz, Heidi Spratt, Christine Suver, John Wilbanks, Adam B. Wilcox, Andrew E. Williams, Chunlei Wu, Clair Blacketer, Robert L. Bradford, James J. Cimino, Marshall Clark, Evan W. Colmenares, Patricia A. Francis, Davera Gabriel, Alexis Graves, Raju Hemadri, Stephanie S. Hong, George Hripcsak, Dazhi Jiao, Jeffrey G. Klann, Kristin Kostka, Adam M. Lee, Harold P. Lehmann, Lora Lingrey, Robert T. Miller, Michele Morris, Shawn N. Murphy, Karthik Natarajan, Matvey B. Palchuk, Usman Sheikh, Harold Solbrig, Shyam Visweswaran, Anita Walden, Kellie M. Walters, Griffin M. Weber, Xiaohan Tanner Zhang, Richard L. Zhu, Benjamin R. C. Amor, Andrew T. Girvin, Amin Manna, Nabeel Qureshi, Michael G. Kurilla, Sam G. Michael, Lili M. Portilla, Joni L. Rutter, Christopher P. Austin, Ken R. Gersing
2020 J jnl
npj Digit. Medicine
Brinnae Bent, Benjamin Goldstein, Warren A. Kibbe, Jessilyn Dunn
2017 conf
CRI
Juli D. Klemm, Mervi Heiskanen, Jerry Li, David Miller, Christos Patriotis, George Redmond, Miguel Ossandon, Jacek Capala, Leah E. Mechanic, Yantian Zhang, Rao Divi, Tony Dickherber, Warren A. Kibbe
2015 J jnl
Nucleic Acids Res.
Warren A. Kibbe, Cesar Arze, Victor Felix, Elvira Mitraka, Evan Bolton, Gang Fu, Christopher J. Mungall, Janos X. Binder, James Malone, Drashtti Vasant, Helen E. Parkinson, Lynn M. Schriml
2015 J jnl
Database J. Biol. Databases Curation
Tsung-Jung Wu, Lynn M. Schriml, Qingrong Chen, Maureen Colbert, Daniel J. Crichton, Richard P. Finney, Ying Hu, Warren A. Kibbe, Heather Kincaid, Daoud M. Meerzaman, Elvira Mitraka, Yang Pan, Krista Smith, Sudhir Srivastava, Sari Ward, Cheng Yan, Raja Mazumder
2013 J jnl
Nucleic Acids Res.
Kai Peng, Wei Xu, Jianyong Zheng, Kegui Huang, Huisong Wang, Jiansong Tong, Zhifeng Lin, Jun Liu, Wenqing Cheng, Dong Fu, Pan Du, Warren A. Kibbe, Simon M. Lin, Tian Xia
2013 J jnl
Nucleic Acids Res.
Siddhartha Basu, Petra Fey, Yogesh Pandit, Robert J. Dodson, Warren A. Kibbe, Rex L. Chisholm
2012 J jnl
Nucleic Acids Res.
Lynn M. Schriml, Cesar Arze, Suvarna Nadendla, Yu-Wei Wayne Chang, Mark Mazaitis, Victor Felix, Gang Feng, Warren A. Kibbe
2012 Misc conf
AMIA
Andrew Gawron, Mark Wimbiscus Yoon, Laura Wimbiscus Yoon, Kristina Verkaik, Meghan Thompson, Abel N. Kho, Warren A. Kibbe, John E. Pandolfino
2012 Misc conf
AMIA
Luke V. Rasmussen, David Were, Jeff Lunt, Steve Lee, Carl Christensen, Warren A. Kibbe, Justin Starren
2012 J jnl
BMC Medical Informatics Decis. Mak.
Monique Hinchcliff, Eric M. Just, Sofia Podlusky, John Varga, Rowland W. Chang, Warren A. Kibbe
2011 J jnl
J. Am. Medical Informatics Assoc.
Griffin M. Weber, William K. Barnett, Mike Conlon, David Eichmann, Warren A. Kibbe, Holly J. Falk-Krzesinski, Michael Halaas, Layne Johnson, Eric Meeks, Donald Mitchell, Titus Schleyer, Sarah C. Stallings, Michael Warden, Maninder Kahlon
2011 J jnl
Nucleic Acids Res.
Pascale Gaudet, Petra Fey, Siddhartha Basu, Yulia A. Bushmanova, Robert J. Dodson, Kerry A. Sheppard, Eric M. Just, Warren A. Kibbe, Rex L. Chisholm
2010 J jnl
BMC Bioinform.
Pan Du, Xiao Zhang, Chiang-Ching Huang, Nadereh Jafari, Warren A. Kibbe, Lifang Hou, Simon M. Lin
2009 J jnl
Bioinform.
Pan Du, Gang Feng, Jared Flatow, Jie Song, Michelle Holko, Warren A. Kibbe, Simon M. Lin
2009 J jnl
Nucleic Acids Res.
Petra Fey, Pascale Gaudet, Tomaz Curk, Blaz Zupan, Eric M. Just, Siddhartha Basu, Sohel N. Merchant, Yulia A. Bushmanova, Gad Shaulsky, Warren A. Kibbe, Rex L. Chisholm
2008 J jnl
Int. J. Comput. Biol. Drug Des.
Chia-Ju Lee, Dong Fu, Pan Du, Hongmei Jiang, Simon M. Lin, Warren A. Kibbe
2007 C conf
BIBE
Pan Du, Simon M. Lin, Warren A. Kibbe, Haihui Wang
2007 J jnl
Nucleic Acids Res.
Warren A. Kibbe
2007 J jnl
Nucleic Acids Res.
Bradley I. Arshinoff, Garret Suen, Eric M. Just, Sohel M. Merchant, Warren A. Kibbe, Rex L. Chisholm, Roy D. Welch
2006 J jnl
Bioinform.
Pan Du, Warren A. Kibbe, Simon M. Lin
2006 J jnl
Nucleic Acids Res.
Rex L. Chisholm, Pascale Gaudet, Eric M. Just, Karen E. Pilcher, Petra Fey, Sohel N. Merchant, Warren A. Kibbe
2004 J jnl
Nucleic Acids Res.
Lisa Kreppel, Petra Fey, Pascale Gaudet, Eric M. Just, Warren A. Kibbe, Rex L. Chisholm, Alan R. Kimmel
2001 Misc conf
AMIA
K. Gwaltney, Christopher G. Chute, Douglas Hageman, Warren A. Kibbe, Kathleen A. McCormick, Dianne M. Reeves, Lawrence W. Wright
redb/extractors/decompiler/apk/jadx_wrapper.py
← Index redb/extractors/decompiler/apk/jadx_wrapper.py python
"""JADX decompiler subprocess wrapper.

Manages JADX subprocess execution for Java decompilation,
following the CAPA extractor subprocess pattern.
"""

import os
import re
import signal
import subprocess
from typing import Dict, Optional


class JADXDecompiler:
    """Subprocess wrapper for JADX Java decompilation."""

    def __init__(self, jadx_path: str = None, timeout: int = None, log=None):
        self.jadx_path = jadx_path or os.getenv("JADX_PATH", "jadx")
        self.timeout = timeout or int(os.getenv("JADX_TIMEOUT", "300"))
        self.log = log

    def decompile(self, apk_path: str, output_dir: str) -> bool:
        """Run JADX decompilation on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.jadx_path,
            "--no-res",
            "--no-imports",
            "--threads-count", "2",
            "--output-dir", output_dir,
            apk_path,
        ]

        try:
            process = subprocess.Popen(
                cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid,
            )

            try:
                stdout, stderr = process.communicate(timeout=self.timeout)
                if process.returncode != 0:
                    if self.log:
                        self.log.warning(
                            f"JADX returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    # JADX may still produce partial output on non-zero exit
                    return os.path.isdir(os.path.join(output_dir, "sources"))
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"JADX timed out after {self.timeout}s"
                    )
                # Kill the process group
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=3)
                except (ProcessLookupError, subprocess.TimeoutExpired):
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except ProcessLookupError:
                        pass
                return False

        except FileNotFoundError:
            if self.log:
                self.log.error(
                    f"JADX not found at '{self.jadx_path}'. "
                    "Install JADX or set JADX_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"JADX execution error: {e}")
            return False

    def parse_java_methods(self, output_dir: str) -> Dict[str, str]:
        """Parse JADX output into per-method Java source.

        Returns dict keyed by 'package.ClassName.methodName(ParamType1, ParamType2)'.
        """
        sources_dir = os.path.join(output_dir, "sources")
        if not os.path.isdir(sources_dir):
            return {}

        methods = {}
        for root, _dirs, files in os.walk(sources_dir):
            for fname in files:
                if not fname.endswith(".java"):
                    continue
                fpath = os.path.join(root, fname)
                try:
                    with open(fpath, "r", encoding="utf-8", errors="replace") as f:
                        content = f.read()

                    # Derive the fully qualified class name from file path
                    rel_path = os.path.relpath(fpath, sources_dir)
                    class_fqn = rel_path.replace(os.sep, ".").replace("/", ".")
                    if class_fqn.endswith(".java"):
                        class_fqn = class_fqn[:-5]

                    file_methods = self._extract_methods_from_java(
                        content, class_fqn
                    )
                    methods.update(file_methods)

                except Exception:
                    continue

        return methods

    def _extract_methods_from_java(
        self, source: str, class_fqn: str
    ) -> Dict[str, str]:
        """Extract individual methods from a Java source file.

        Uses brace-depth tracking to find method boundaries.
        """
        methods = {}
        lines = source.split("\n")
        i = 0

        while i < len(lines):
            line = lines[i]
            match = self._is_method_declaration(line)
            if match:
                method_name, param_types = match
                # Track brace depth to find method end
                start_line = i
                brace_depth = 0
                found_open = False

                for j in range(i, len(lines)):
                    for ch in lines[j]:
                        if ch == "{":
                            brace_depth += 1
                            found_open = True
                        elif ch == "}":
                            brace_depth -= 1

                    if found_open and brace_depth == 0:
                        method_body = "\n".join(lines[start_line : j + 1])
                        key = f"{class_fqn}.{method_name}({param_types})"
                        methods[key] = method_body
                        i = j + 1
                        break
                else:
                    i += 1
            else:
                i += 1

        return methods

    # Regex for method declarations (not constructors, not class/interface decl)
    _METHOD_DECL_RE = re.compile(
        r"^\s*(?:(?:public|private|protected|static|final|synchronized|"
        r"native|abstract|strictfp)\s+)*"
        r"(?:[\w<>\[\]?.]+\s+)"  # return type
        r"(\w+)"  # method name
        r"\s*\(([^)]*)\)"  # parameters
        r"(?:\s*throws\s+[\w.,\s]+)?"
        r"\s*\{"
    )

    def _is_method_declaration(self, line: str) -> Optional[tuple]:
        """Check if a line is a method declaration.

        Returns (method_name, param_types_str) or None.
        """
        m = self._METHOD_DECL_RE.match(line)
        if not m:
            return None

        method_name = m.group(1)
        params_raw = m.group(2).strip()

        # Skip class-level blocks
        if method_name in ("if", "for", "while", "switch", "try", "catch"):
            return None

        # Extract just the type names from parameters
        if not params_raw:
            return (method_name, "")

        param_types = []
        for param in params_raw.split(","):
            param = param.strip()
            if not param:
                continue
            parts = param.split()
            # Last non-annotation token before the variable name is the type
            # Simple heuristic: type is second-to-last, name is last
            if len(parts) >= 2:
                param_types.append(parts[-2])
            elif len(parts) == 1:
                param_types.append(parts[0])

        return (method_name, ", ".join(param_types))