{
 "number": 36636,
 "input_hash": "f88f04ece7df7d54",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-27T01:28:37+00:00",
 "result": {
  "summary": "Makes the `.onion` suffix check case-insensitive when parsing network addresses in `CNetAddr::SetTor`. This aligns Tor address parsing with existing I2P hostname handling and prevents addresses with uppercase `.ONION` suffixes from falling through to regular DNS hostname resolution.",
  "problem": "Tor addresses containing uppercase letters in the `.onion` suffix are not recognized as Tor addresses. Instead, they fail `SetTor` and fall through to standard DNS hostname resolution, risking privacy leaks or connection failures.",
  "card": "Makes the suffix check case-insensitive when parsing .onion network addresses, matching existing behavior for I2P hostnames. Currently, hostnames ending in uppercase variations like .ONION fail Tor address detection and fall through to regular DNS resolution. This prevents potential DNS leaks and connection failures when configuring or parsing mixed-case Tor addresses.",
  "evidence": [
   "PR description: 'With the current code, a name like <addr>.ONION will not be parsed as a Tor address, and will instead fall through to regular hostname resolution.'"
  ],
  "scope_notes": "",
  "changed_since_previous": "Now includes the complete diff and test coverage (a new unit test in `src/test/net_tests.cpp` validating mixed-case Tor address parsing); implementation logic remains the same.",
  "thread": {
   "last_event_at": "2026-10-26T22:12:51Z",
   "events": 4,
   "head_sha": "0574f096abf0cfe75501542efe1787679340d3d3",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-10-26",
    "id": "c:6423711667",
    "on": "author",
    "url": "https://github.com/bitcoin/bitcoin/pull/36636#issuecomment-6423711667",
    "what": "respond to Husteem's suggestion to use CaseInsensitiveEqual"
   }
  ],
  "risk": {
   "level": "low",
   "touches": [
    "p2p",
    "tests"
   ],
   "why": "A flaw in netaddress parsing could misparse network addresses or fail to identify Tor destinations, but the change is tiny, localized, and well-covered by unit tests."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-26",
   "open_concerns": [
    "Husteem: Use CaseInsensitiveEqual from util/strencodings.h instead of ToLower to avoid temporary string creation"
   ],
   "resolved_concerns": []
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong: substantive support, no open objection (AndreaDiazCorreia, winterrdog)",
   "reason": "Added ACKs from Husteem and winterrdog, and recorded Husteem's non-blocking suggestion regarding CaseInsensitiveEqual.",
   "evidence": [
    "Husteem (suggestion, approach, must be answered, open): Use CaseInsensitiveEqual from util/strencodings.h instead of ToLower to avoid temporary string creation",
    "vasild: ACK",
    "AndreaDiazCorreia: ACK \u2014 Built and ran net_tests, netbase_tests, and base32_tests successfully. Confirmed the new test fails with the parent\u2019s netaddress.cpp.",
    "Husteem: ACK",
    "winterrdog: Tested ACK \u2014 successfully built and tested on: Windows 10/MSVC 19.51.36257/x86_64. changes LGTM and the intent is pragmatic"
   ],
   "objections": [
    {
     "reviewer": "Husteem",
     "association": "NONE",
     "type": "suggestion",
     "kind": "approach",
     "harm": "",
     "request": "Use CaseInsensitiveEqual from util/strencodings.h instead of ToLower to avoid temporary string creation",
     "question": "",
     "text": "Use CaseInsensitiveEqual from util/strencodings.h instead of ToLower to avoid temporary string creation",
     "clears_with": "answer",
     "blocking": false,
     "status": "open",
     "status_note": "",
     "cleared": false,
     "author_replied": false,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [],
     "evidence": "2026-10-26: 'Using `CaseInsensitiveEqual(addr.substr(addr.size() - suffix.size()), suffix)` from `util/strencodings.h` avoids the temporary string entirely. It would be nice to use that here'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36636#issuecomment-6423711667",
     "id": "c:6423711667",
     "at": "2026-10-26",
     "status_at": null,
     "status_by": null,
     "resolution_evidence": "",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "vasild",
     "reason": "",
     "substantive": false,
     "verdict": "ACK",
     "id": "r:5637653085",
     "url": "https://github.com/bitcoin/bitcoin/pull/36636#pullrequestreview-5637653085",
     "at": "2026-10-24",
     "association": "MEMBER",
     "evidence": "none",
     "areas": []
    },
    {
     "reviewer": "AndreaDiazCorreia",
     "reason": "Built and ran net_tests, netbase_tests, and base32_tests successfully. Confirmed the new test fails with the parent\u2019s netaddress.cpp.",
     "substantive": true,
     "verdict": "ACK",
     "id": "r:5643376401",
     "url": "https://github.com/bitcoin/bitcoin/pull/36636#pullrequestreview-5643376401",
     "at": "2026-10-25",
     "association": "NONE",
     "evidence": "tested",
     "areas": [
      "net_tests",
      "netbase_tests",
      "base32_tests",
      "netaddress.cpp"
     ]
    },
    {
     "reviewer": "Husteem",
     "reason": "",
     "substantive": false,
     "verdict": "ACK",
     "id": "c:6423711667",
     "url": "https://github.com/bitcoin/bitcoin/pull/36636#issuecomment-6423711667",
     "at": "2026-10-26",
     "association": "NONE",
     "evidence": "read",
     "areas": []
    },
    {
     "reviewer": "winterrdog",
     "reason": "successfully built and tested on: Windows 10/MSVC 19.51.36257/x86_64. changes LGTM and the intent is pragmatic",
     "substantive": true,
     "verdict": "Tested ACK",
     "id": "r:5659812839",
     "url": "https://github.com/bitcoin/bitcoin/pull/36636#pullrequestreview-5659812839",
     "at": "2026-10-26",
     "association": "CONTRIBUTOR",
     "evidence": "tested",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "vasild",
     "stance": "support",
     "note": "ACKed commit",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-24",
     "last": "2026-10-24"
    },
    {
     "login": "AndreaDiazCorreia",
     "stance": "support",
     "note": "tested ACK; ran net, netbase, and base32 tests",
     "association": "NONE",
     "comments": 1,
     "first": "2026-10-25",
     "last": "2026-10-25"
    },
    {
     "login": "Husteem",
     "stance": "support",
     "note": "ACKed; suggested using CaseInsensitiveEqual",
     "association": "NONE",
     "comments": 1,
     "first": "2026-10-26",
     "last": "2026-10-26"
    },
    {
     "login": "winterrdog",
     "stance": "support",
     "note": "tested ACK on Windows MSVC",
     "association": "CONTRIBUTOR",
     "comments": 1,
     "first": "2026-10-26",
     "last": "2026-10-26"
    }
   ],
   "derivation": "substantive support, no open objection (AndreaDiazCorreia, winterrdog)",
   "model_state": null,
   "corrections": [],
   "notes": "Added ACKs from Husteem and winterrdog, and recorded Husteem's non-blocking suggestion regarding CaseInsensitiveEqual."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "p2p",
    "member": true,
    "evidence": "Touches src/netaddress.cpp and address parsing logic for the Tor integration.",
    "band": "P3",
    "reason_tag": "bug fix",
    "score": 0.35,
    "factors": {
     "bug_severity": 1,
     "leverage": 0,
     "performance": 0,
     "security_stability": 1,
     "user_value": 1
    },
    "rationale": "Fixes an address parsing edge case where uppercase `.ONION` addresses fail Tor detection and fall through to standard DNS hostname resolution. The PR description notes that this prevents unexpected DNS lookups and connection failures, plugging a minor privacy leak when parsing mixed-case Tor hostnames."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-27T01:28:37+00:00",
  "code": "2026-10-26T01:25:01+00:00",
  "judgments": 1
 }
}