Repository navigation
review: fix defects from a full code review, rebuild remaining tool views - #43
Merged
Merged
Conversation
…d Map, Graph, Search, Hash sets, VirusTotal, Shadow copies - EmptyState control, toolbar/sub-bar/footer styles, ExportButton, ToolExport helper, AppNavigator - DataGrid headers no longer clip in narrow columns (sort-arrow reserve 32 -> 14 px) - Map: real photo time (GPS fix / camera clock / file time, labelled), range validation, stop, CSV/JSON/KML export - Graph: no invented timestamps, Cc and folded MBOX headers, pick a person to filter, export - Search: one flow (index a folder, then search), re-index updates in place, bad query is an error not 0 hits, second index build no longer fails on the write lock, double-click opens the hit in the Hex Viewer - Hash sets: New vs Open (an open dialog cannot create), digest length check - VirusTotal: only a well-formed hash is sent, status and errors are shown, lookup logged to custody; not a shell
…s; rebuild remaining tool views Five reviewers read the whole codebase; the defects they confirmed are fixed here, each with a test where the logic is testable. Test count 269 -> 1127 (.NET) plus 163 Python. Evidence integrity - E01: 64 MiB section ceiling no longer applied to sectors sections (real images failed to open); next/done with size 0 accepted; overlapping tables bounded; all-zero digests read as not recorded - Imager: failing source no longer produces endless zeros (aborts, keeps an INCOMPLETE .partial and log); cancel deletes partial output; sector padding is hashed so E01/VHD/VHDX verify; damaged source chunks reported - AFF4: stored chunks returned raw; unresolvable map targets are an error, not zeros; writer follows the chunk-size convention other readers rely on - $LogFile restart-area fields read from the documented offsets; USN no longer hangs on a truncated tail or aborts on a short V3 record; FAT times no longer shifted by the examiner's time zone - Carver: no int overflow on large extents, validates before extracting, streams output - Custody: entries logged to the case the work started under; attestations from an unknown key are not reported as verified; bookmark delete scoped by case; CLI custody verify actually verifies False negatives and wrong results - YARA/IOC: case-insensitive strings of any length, shared literals, tagged rules, conditions evaluated (unsupported features skip the rule with a reason) - Hex search: hex patterns never case-folded; invalid regex/hex reported as invalid, not 'no matches' - Search index: a bad query is an error; re-indexing updates in place; second build no longer fails - ShimCache decoder, Amcache SHA-1, Linux log timestamps, LNK target times, UserAssist filter, timeline source filter, SRUM/browser truncation flags Stability and security - Opening an in-use file no longer exits the app; Find dialog regex timeout handled; settings/recents/layout written atomically and never over an unreadable file; documents capped and extracted off the UI thread - Report HTML: raw HTML disabled, fields encoded, CSP added, exhibit text escaped; PDF path cannot load files - Plugins: trust moved to a per-user store, each plugin and its dependencies checked by hash; Windows mount no longer interpolates the path into PowerShell; Linux write blocker checks blockdev - Python sidecar: UTF-8 I/O, serialised writes, inactivity timeout, imager seek/retry, parser hardening UI - All remaining tool views rebuilt on the shared layout; Cases tool now activates the case; Workflows can run; Settings dialog shows only settings that do something and Theme is applied; hex shortcuts only act while the Hex Viewer is on screen; rail scrolls to the selected tool
- Imager / Convert / Carver show damaged-source, padding and incomplete-image results; Stop buttons - Plugins tool: turn plugins on, trust or revoke a specific file (trust lives in the user profile) - Custody: a valid signature from an unknown key is reported as such, with how to trust a colleague's key - Strings: one scan at a time; the 50,000-string limit is stated with how far the scan got - Graph uses the shared MBOX header reader; report exhibits escape evidence text - Filesystem: FAT times shown as the device's local clock, not UTC - Custody entries are logged to the case the work started under in every tool - Settings dialog stays open when a save fails; palette and help copy - Tests: search index, Map KML and validation, Graph filter (1,141 .NET tests) - CHANGELOG, LIMITATIONS, FEATURES, SECURITY updated to match
…parator; apply dotnet format Path.GetFileName splits on the current platform's separators only, so a Windows path recorded on Linux kept its whole path (caught by the Linux CI job).
Imaging - Refuse to overwrite an existing image, E01 chain or leftover .partial unless asked (ImageJob.Overwrite); reader ignores foreign later segments and reports an incomplete chain; Verify shows both - Linux loop mounter detaches on failure and picks read-only options per file system; EvidenceOpener no longer leaks its stream when detection throws Hex - Find pages past 1,000 hits (HexSearch.FindNext / FindPrevious) instead of wrapping at the cap - Data inspector decodes from the start of a selection; toolbar adapts to the window width - HexViewer is tested headlessly (Avalonia.Headless): selection, clicks, scroll clamp, empty and >4 GiB buffers Tools - Filesystem: live entries carry their real MFT record number / inode; empty and constant columns removed - YARA and IOC report damaged chunks in the source; IOC logs the scanned folder as evidence, clears stale rows, can stop - Network names the missing capture library; SRUM / compressed Prefetch say they need Windows; folder walks include hidden and system entries and count unreadable subfolders - Carver: GIF and PDF carved to their real end - Mount can unmount; Verify can be stopped; wording of verify results in plain words Shell - Custody write failures are surfaced; fatal errors are shown on Linux and macOS - New palette commands: Hash a file…, Check for updates (manual only) - Sidebar groups are remembered with the window layout; clearing the filter restores them - Watermarks no longer read as values; one primary button per empty state - Removed unused CrashRecovery and PythonBootstrap Sidecar - C# wrappers use paging, progress and error fields; new tests/Cinder.Sidecar.Tests (114) Dev - Screenshot harness can seed a synthetic case, bookmarks and recents, render at 2x and render dialogs 1,474 .NET tests, 164 Python.
…assumption; tab accent - assets/screenshots: home, hex, filesystem, report. Captured from the running window at 150 % scale and downscaled to 1600 wide. Synthetic NTFS volume and demo case only; no real paths or account names. - docs/screenshots.md: how they are produced (--shot ... --hold + tools/screenshots/Capture-Window.ps1) - Harness: --hold keeps the window on screen for a capture; review renders now run off-screen instead of flashing a window over the desktop - IOC summary: file names are taken under either path separator (failed on Linux CI) - Active tab accent is a child element rather than an inset shadow (off-screen renders at other scales lost the tab's content) - Inspector label shortened so it fits beside the LE / BE switch
…d to end Fourteen tests that set the fields a screen sets, run the command and read the status: imaging to Raw, E01 and AFF4; refusing to replace an existing image; the E01 padding note; Convert's output and source checks; carving an embedded PNG; refusing to carve beside the evidence; and the custody tool reporting an intact log, naming an altered entry, and verifying a signature. Test count in the changelog and feature list updated to 1,488.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A full review of the codebase and the UI, with the confirmed defects fixed and every remaining tool view rebuilt on one layout. Each fix has a regression test where the logic can be tested: the .NET suite goes from 269 to 1,488 tests and the Python sidecar suite from 2 to 164. Details are in the CHANGELOG entry; the main points:
Evidence integrity
sectorssection failed to open (including Cinder's own output); EnCase-style size-0next/donesections were rejected; all-zero digests counted as recorded hashes..partial; cancel deletes partial output; sector padding is hashed so E01 / VHD / VHDX verify; damaged source chunks are reported.$LogFilerestart-area fields were read from the wrong offsets; the USN parser could hang or stop early; FAT times were shifted by the examiner's time zone.cinder custody verifyverified nothing.Wrong or silently incomplete results
Stability and security
Interface
Second round
docs/screenshots.mdandtools/screenshots/Capture-Window.ps1reproduce them.Things that change for existing data
Not verified here
Listed in LIMITATIONS.md under "Known gaps left by the full review pass": the
$LogFilefix against a real log, the Hex Viewer control beyond its extracted arithmetic, real-device imaging, Volatility process handling, and most of the Python sidecar's C# wrappers.Test plan
dotnet test -c Release(1,488 tests) andpython -m pytestinparsers/(164)