Skip to content
View jdotc1's full-sized avatar

Highlights

  • Pro

Block or report jdotc1

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
jdotc1/README.md

medical imaging security · radiation oncology

I identify and patch security and data-integrity defects in medical imaging software, focusing on defensive DICOM/NIfTI parsing, de-identification integrity, archive containment, and filesystem safeguards. I extend this work to scientific infrastructure and develop open-source privacy, binary-inspection, and research tools for Apple Silicon (ARM64), informed by my background in radiation oncology, MR imaging, and radiomics.

Medical imaging hardening

131 PRs merged across 70 external repositories, spanning medical imaging, scientific data integrity, and platform engineering.

Selected security & privacy contributions

Medical imaging & privacy

Merged contributions
Imaging parser hardening
NiBabel #1568 and NIFTI-Reader-JS #58: reject undersized NIfTI extensions before reading payloads.
highdicom #471: reject undefined DICOM encapsulated pixel-fragment lengths before reading their payloads.
NRRD input validation
pynrrd #173: reject nonpositive dimensions and axis sizes before reading NRRD data or accessing detached files.
Private model-download staging
nnU-Net #3078: use a unique private temporary directory for model download archives and clean up after use.
DICOM receive-path safety
DICOM-rs #845: reject unsafe SOP Instance UIDs before storing received DICOM files.
Archive extraction containment
Nilearn #6654: validate extraction destinations by path components to prevent sibling-prefix confusion in containment checks.
De-identification policy integrity
deid #305: parse inline comments without breaking func:/var: lookups or quoted hashes.
deid #306: preserve earlier named filter rules so later recipes cannot silently replace them.
deid #307: refresh DICOM field lookups and apply KEEP rules to current fields, including newly added ones.
Validation-state isolation
dicom-validator #303: restore pydicom's process-wide reading-validation mode after success or failure so permissive settings do not persist.
Medical imaging output permissions
deid #304: default new pixel-cleaner output directories to owner-only permissions.
HTML output encoding
dicom-validator #301: escape filenames in HTML report headings to render markup as text.
Temporary executable isolation
RSNA Anonymizer #41: isolate each process's compiled macOS documentation helper in a private temporary directory.
Shell argument integrity
BIDScoin #302: quote image, output, and mask paths in local SynthStrip commands.
surfa #86: preserve FreeView subtitle text as a literal shell argument.
Supply chain reproducibility
dcm2niix #1046: pin optional Cloudflare zlib to a source commit.
Archive checksum enforcement
PyMedPhys #2394: enforce TRF archive checksums under Python -O; retain incoming logfiles when verification fails.

Broader security & data-integrity engineering

Merged contributions
Unintended file overwrite prevention
fonttools #4342: protect unrelated ZIP archives during file generation.
svglib #518: parse compressed SVGs without overwriting sibling files.
Build frontend error integrity
pyproject-api #329: preserve backend paths ending in spaces.
pyproject-api #337: preserve failed-backend diagnostics across process boundaries.
S3 request integrity
s3fs #1067: forward delete safeguards, including expected bucket owner and MFA parameters.
s3fs #1068: honor exclusive-create conditions, ACLs, and metadata for zero-byte writes.
Array index bounds enforcement
PyTables #1389 and #1393: reject invalid indices before data access, preventing unintended reads and writes.
SFTP directory permissions
fsspec #2358: honor requested permissions when creating parent directories.
Code-signature evidence integrity
REA #5765: preserve partial Mach-O signature observations and explicitly flag incomplete per-architecture coverage.
REA #5778: reject mixed native dyld diagnostics instead of misclassifying them as known refusals.

Open medical-imaging security proposals

These proposals remain open and unmerged; they are separate from the 131 merged PRs.

Open hardening proposals
Output-path containment
dicomweb-client #130: propose constraining UID-derived CLI output paths to the selected directory.
Credential redaction
MRIQC #1451: propose redacting NITRC credentials from failed-download diagnostics.
Literal data parsing
HeuDiConv #880: propose parsing cached conversion tables as data rather than executing expressions.

My projects

I develop macOS applications, data-integrity tools, and reusable libraries. Each repository documents its own licensing and distribution terms.

Project What it helps you do
DICOM Anonymizer Locally pseudonymize MR, CT and RTSTRUCT metadata, including reference-consistent UID remapping, output audits and interruption recovery. Source files are preserved; pixels and contours are not scrubbed. Preview releases.
AIRS icon
AIRS
Review ARM64 Mach-O unwind and structural evidence without executing inspected binaries, with explicit coverage and saved reports. Preview releases.
EntitlementDiff icon
EntitlementDiff
Compare declared entitlements between macOS app builds and architectures, preserving exact typed values and saved comparisons. Releases.
SidecarCompare icon
SidecarCompare
Compare MRI JSON acquisition metadata with exact numbers, original tokens and documented units in a native app and shared CLI core.
Lumen Catalog icon
Lumen
Build macOS interfaces with semantic design tokens, editable themes, reusable SwiftUI/AppKit components and an interactive Catalog. The related LumenUI repository tracks the broader component system.
MacScope icon
MacScope public workspace
Explore the architecture and source of the native macOS binary-analysis workspace, including coordinated disassembly, graph, pseudocode and hex views and isolated workers.
Prism Native MCP Use a local MCP server to build native GraphPad Prism tables, descriptive analyses, editable graphs and layouts from supplied observations.

Additional merged contributions

Scientific data integrity and security tooling

Merged contributions
Array type and view integrity
PyTables #1387: preserve coordinate views and read-only indices.
PyTables #1388: reject non-integer Atom dimensions before coercion.
Scientific array correctness
batchgenerators #144: retain requested subunit scale bounds in spatial augmentation.
xarray #11793: handle variable-width string arrays in str.extract.
Atomic download publication
BrainStat #385: publish downloads atomically after successful copying, preserving existing files on failure.
Imaging data and geometry integrity
highdicom #486: prevent integer overflow during volume normalization.
highdicom #487: preserve DICOM structured-report temporal-coordinate sequence types.
highdicom #488: preserve root/non-SR context in content-item queries and insertion.
highdicom #489: correctly decode maximum-length LUTs and prevent unintended mutation of caller Datasets.
PyVista #9454: compare structured-data extents to distinguish cell layouts and shifted offsets.
Metadata path integrity
ANTsPy #931: replace only the terminal .npy suffix to keep JSON sidecars beside NumPy images; document legacy-path migration.
Session capability reporting
REA #5763: align session-discovery capabilities with supported target operations.
SBOM parser resilience
CycloneDX Core Java #957: recognize JSON/XML SBOMs with leading whitespace.
Security notification fidelity
Dependency-Track #7704: expose latest-version status in notification subjects.

Imaging, research, and ARM64 support

Merged contributions
Failure handling
Pillow #10271: handle zero-width images in ImageOps.cover() without division by zero.
ANTsPy #924: reject failed HTTP responses before caching test data.
pyplastimatch #15: propagate conversion and resampling failures to callers.
OME-Zarr #707: enforce download-path and existing-destination checks under optimized Python.
Imaging numerical safeguards and build diagnostics
ITK #6986: handle empty VectorContainer-to-NumPy conversions.
ITK #6991: reject transform parameter counts beyond the metric limit.
ITK #6987: restore warnings for handwritten wrapper code while retaining suppression for generated sources.
macOS architecture compatibility
ITK #6947: derive FFTW SIMD defaults from the requested macOS architecture.
dcm2niix #1043: support linking from source paths containing spaces.
Shell path safety
ITK-SNAP #280: preserve spaced application paths in the macOS launcher.
FastSurfer #950: quote FreeSurfer stub destinations during helper generation.
Buffering policy enforcement
fsspec #2359: honor zero buffering for immediate and deferred SFTP opens.
Data URL decoding integrity
fsspec #2386: recognize case and permitted whitespace in base64 markers.
Linux ARM64 integration testing
libjxl #5039: publish native Linux AArch64 static release tools.
libjxl #5040: document a GCC/Highway ARM64 build workaround.
Cover JPEG/JPEG 2000 plugins and pydicom integration in pylibjpeg-libjpeg #91 and pylibjpeg-openjpeg #129.
Test the latest-Dask configuration in OME-Zarr #704.
Extend coverage to zarrs #490, zarrs-python #199, connected-components-3d #153, fastremap #60, and FabIO #675.
Test suite reliability
ITK #7004: install xarray in macOS/Windows CI and mark its test skipped when the dependency is absent.
Nilearn #6664: stabilize plotting-test parameter order for parallel collection.
xarray #11780: skip the DataArray-to-Dask-DataFrame test when PyArrow is absent.
silx #4745: support Qt 6.12 drag-event constructors and older Qt versions.

The full contribution index links all merged PRs, documentation, issue reports, additional proposals, and fork work.

Research & engineering practice

I use source review, static binary analysis, and focused regression tests to produce small, reviewable patches with reproducible evidence. My AIRS project applies these principles to ARM64 Mach-O inspection, emphasizing bounded analysis, explicit coverage, and transparent reporting of unresolved findings. My DICOM Anonymizer documents a private security-reporting process and guidance for synthetic reproductions.

In imaging and radiomics, I prioritize numerical fidelity, units, acquisition metadata, and source lineage, and distinguish declared configuration from observed behavior.

Connect

I welcome collaboration on medical imaging security, radiomics infrastructure, defensive binary analysis, and native Apple Silicon applications.

Research profile · ORCID

Pinned Loading

  1. EntitlementDiff EntitlementDiff Public

    Read-only macOS entitlement comparison: inspect architecture-specific declarations, exact typed changes, and reproducible reports.

    Swift 1

  2. SidecarCompare SidecarCompare Public

    Native macOS MRI JSON-sidecar comparison with exact-decimal arithmetic, preserved source tokens, typed findings, and local-only exports.

    Swift 1

  3. AIRS AIRS Public

    Read-only macOS evidence review for ARM64 Mach-O unwind/CFI, code-signature structure, cross-build comparisons, and coverage-aware reports.

    Swift 1

  4. dicom-anonymizer dicom-anonymizer Public

    Native macOS MR/CT/RTSTRUCT metadata pseudonymization with UID remapping, optional MRI JSON sidecars, staged audits, and interruption recovery.

    Python 1