Skip to content

refactor: dedupe managers, fix pointer/search bugs, harden server#30

Merged
ykus4 merged 2 commits into
mainfrom
refactor/cleanup-bugfixes-security
Jul 9, 2026
Merged

refactor: dedupe managers, fix pointer/search bugs, harden server#30
ykus4 merged 2 commits into
mainfrom
refactor/cleanup-bugfixes-security

Conversation

@ykus4

@ykus4 ykus4 commented Jul 9, 2026

Copy link
Copy Markdown
Owner

概要

コードベース全体のリファクタリングと、分析で見つかったバグ・並行性・セキュリティ問題の修正。挙動互換を保ちつつ重複を除去し、ポインタ機能の実バグを直し、Web サーバを安全側の既定に変更しました。

リファクタリング

  • internal/poller.Pool を新設Freezer/Watcher/AlertWatcher を統合。3つでほぼ同一だった map+stopチャネル+ticker+List/Stop/StopAll を一元化(~150行削減)。
  • handlers.go の decode→validate→error ボイラープレートをジェネリック decodeJSON[T]require*/writeOK/queryInt ヘルパで圧縮。http.Status* 定数化。
  • search.go の値/バイト検索ワーカーを scanRegions に共通化。adbsignal() 集約と Peek/ReadRegion シェル経路統一。cmp のジェネリック化。
  • モジュール名 memodroidmemdroid に統一(go.mod / imports / docs / CLI ヘッダ)。

バグ修正

  • ポインタ scan/resolve: 4096境界でのポインタ取りこぼし解消(ReadRegion 一括化)、モジュール相対 BaseOffset を保存、オフセットを base→final 順に統一、サイクル防止。fake driver による往復テストを追加。
  • REST searchPattern/searchString が結果を破棄していた問題を修正(セッションに保存し候補操作可能に)。
  • CompareValues の短スライス panic ガード、watch/alert での TypeBytes 明示エラー。
  • .CT インポートのモジュール判定修正、UndoStack/Session に mutex 追加。

セキュリティ

  • 既定で loopback バインド-addr/-token(MEMDROID_TOKEN)フラグ、無認証で外部公開時の警告。
  • HTTPメソッド制限(他は 405)、ボディ 1MiB 上限、サーバタイムアウト。
  • wswatch.Broadcast をロック外書き込み+死活クライアント掃除に。

テスト

poller / search/types / store/cheatengine / pointer にユニットテストを新規追加。

検証

  • go build ./... / go vet ./... パス
  • go test -race ./... 全パス
  • バイナリ起動とフラグ(-addr/-token)動作確認済み

ykus4 added 2 commits July 9, 2026 17:34
Refactoring
- Add internal/poller.Pool and back Freezer/Watcher/AlertWatcher with it,
  removing ~150 lines of duplicated map+stop-channel+ticker boilerplate.
- Collapse server handler decode/validate/error boilerplate behind generic
  decodeJSON[T] and require* helpers; use net/http status constants.
- Extract shared scanRegions engine in search; unify adb signal() and the
  Peek/ReadRegion shell path; make cmp generic.
- Rename module memodroid -> memdroid across go.mod, imports, docs, CLI.

Bug fixes
- Pointer scan/resolve: fix chunk-boundary pointer loss (bulk ReadRegion),
  store module-relative BaseOffset, apply offsets in base->final order, add
  cycle guard. Round-trip covered by a new fake-driver test.
- REST pattern/string search now persist results into the session.
- Guard CompareValues against short slices; reject TypeBytes in watch/alert.
- Fix .CT module+offset detection; add mutexes to UndoStack and Session.

Security
- Bind loopback by default; add -addr/-token (MEMDROID_TOKEN) flags and a
  warning when exposed without auth.
- Gate endpoints by HTTP method, cap request bodies at 1 MiB, add server
  timeouts, and broadcast to WebSocket clients outside the lock with dead-
  client pruning.

Tests
- Add unit tests for poller, search/types, store/cheatengine, and pointer.
@ykus4
ykus4 merged commit a791d26 into main Jul 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant