You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 47c46a6
Browse filesBrowse the repository at this point in the historyBrowse files
oracle: Page.xaml.cs timer is a TRUE POSITIVE (custom IDisposable Stopwatch), not an FP
Cracked the mechanism behind issue #161 from the core side: the finding renders
via the flow-locals path (ownir.py rkind=="flow-local"), whose extractor
candidate gate REQUIRES ImplementsIDisposable. The raw protobuf source shows the
file has no `using System.Diagnostics;` — it has `using Nuxleus.Performance;` and
uses `Stopwatch.UnitPrecision` / `UnitPrecision.NANOSECONDS` / `timer.Scope =
() => …`. So `Stopwatch` is `Nuxleus.Performance.Stopwatch`, a custom IDisposable
scope-timer (you can only `using` an IDisposable), NOT System.Diagnostics.Stopwatch.
`Stopwatch timer = new Stopwatch()` is genuinely never disposed — the disposing
`using (timer) { … }` block is commented out — so the OWN001 is a REAL leak the
extractor correctly flagged. It stays baselined as NON-PRODUCT sample (assorted/
Silverlight demo), like the NetTranscoder `sync` entry — reclassified from FP to
true-but-benign-sample. The earlier "missed using" and "non-IDisposable Stopwatch
FP" readings were both wrong; issue #161 is closed as invalid.
Corrected the baseline entry reason, oracle-known-fps.md root-cause #1, the
per-finding verdict row, and the disposition summary (Baselined FP 6→5,
true-but-benign sample 2→3). oracle selftest 31/31.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019846YSZ35c7CdkWQ1qX5gm
# a get-only property over a constructed XsltArgumentList field, handler captures `this`).
38
38
# Now fixed at the source by PropertyReturnsOwnedMember — confirmed cleared on a live
39
39
# protobuf oracle run (own-only 0, the finding absent from own-only and baselined) — deleted.
40
-
# RE-TRIAGED 2026-06-28 (live protobuf oracle run): the prior reason — "disposed by an enclosing
41
-
# using (timer) the extractor missed" — was a MISDIAGNOSIS read from COMMENTED-OUT code. In the
42
-
# real source the only `using (timer)` block is commented out, and `timer` is a Stopwatch (RunTest;
43
-
# btnRunTest_Click has a DispatcherTimer local) — neither is IDisposable. So the using-statement
44
-
# fix does NOT apply here (confirmed: still emitted, still baselined). It stays a non-product FP;
45
-
# the open question is WHY a non-IDisposable timer-shaped local is flagged at all (needs a local
46
-
# extractor repro; tracked in issue #161). See docs/notes/oracle-known-fps.md root-cause #1.
47
-
protobuf-net/protobuf-net | Page.xaml.cs | OWN001 | local 'timer' | non-product (assorted/ Silverlight perf sample); `timer` is a non-IDisposable Stopwatch/DispatcherTimer and the only using(timer) block is commented out — not a missed-using; flagging it is a separate precision question, kept baselined
40
+
# RE-TRIAGED 2026-06-28 (live protobuf oracle run + raw source). This is a TRUE POSITIVE, not an
41
+
# FP: `Stopwatch` here is `Nuxleus.Performance.Stopwatch` (the file has `using Nuxleus.Performance;`
42
+
# and uses `Stopwatch.UnitPrecision`/`UnitPrecision.NANOSECONDS`/`timer.Scope = () => …` — NOT
43
+
# System.Diagnostics.Stopwatch), a custom IDisposable scope-timer. `Stopwatch timer = new Stopwatch()`
44
+
# is genuinely never disposed: the disposing `using (timer) { … }` block is COMMENTED OUT. The
45
+
# extractor flags it via the flow-locals path, which requires ImplementsIDisposable — so it
46
+
# correctly resolved the custom type as IDisposable. Kept baselined as NON-PRODUCT sample (assorted/
47
+
# Silverlight perf demo), exactly like the assorted/ NetTranscoder `sync` entry. The earlier
48
+
# "missed using" and "non-IDisposable Stopwatch FP" readings were both wrong; issue #161 is closed.
49
+
protobuf-net/protobuf-net | Page.xaml.cs | OWN001 | local 'timer' | non-product (assorted/ Silverlight perf demo); TRUE POSITIVE — `timer` is a custom IDisposable Nuxleus.Performance.Stopwatch genuinely never disposed (the using(timer) block is commented out). Baselined as non-product, not as an FP
The 6 baselined FPs + the 2 non-product-sample reals = 8 findings, covered by
32
+
(Re-triage 2026-06-28: `Page.xaml.cs``timer` moved from "Baselined FP" 6→5 to
33
+
"True-but-benign sample" 2→3 — it is a real leak of a custom `IDisposable`
34
+
`Nuxleus.Performance.Stopwatch`, not the BCL non-disposable type first assumed.)
35
+
36
+
The 5 baselined FPs + the 3 non-product-sample reals = 8 findings, covered by
33
37
**7 rules** in `corpus/oracle-fp-baseline.txt` (the two `NetTranscoder` copies
34
38
share one basename-keyed rule); the 2 test-base findings are the `--exclude-tests`
35
39
drops; the 4 true positives are deliberately **not** suppressed.
@@ -87,7 +91,7 @@ this.
87
91
|`src/protobuf-net.Core/ProtoWriter.BufferWriter.cs``_nullWriter`|**FP → baseline**| intentional null-object kept attached for pooled reuse; `Dispose()` comments *"don't cascade dispose to the null one"*|
88
92
|`assorted/.../ProtoTranscoder.cs``sync` (×2 copies) |**true-but-benign → baseline (non-product sample)**|`NetTranscoder` isn't `IDisposable`; one `ReaderWriterLockSlim` for app lifetime in a sample/extension tree |
89
93
|`assorted/ProtoGen/CommandLineOptions.cs``XsltMessageEncountered`|**FP → baseline**| self-subscription: publisher (`xsltOptions`) and the lambda are both owned by the same `CommandLineOptions`, co-lifetimed |
90
-
|`assorted/SilverlightExtended/Page.xaml.cs``timer`|**FP → baseline (re-triaged 2026-06-28)**|NOT a missed `using`— the `using (timer)`block is commented out and `timer` is a non-`IDisposable``Stopwatch`/`DispatcherTimer`; flagging it is a separate precision question. Sample code. |
94
+
|`assorted/SilverlightExtended/Page.xaml.cs``timer`|**true-but-non-product → baseline (re-triaged 2026-06-28)**|TRUE POSITIVE: `timer` is a custom `IDisposable``Nuxleus.Performance.Stopwatch` (NOT `System.Diagnostics.Stopwatch`) never disposed — the disposing `using (timer)` is commented out. Correctly flagged; baselined as non-product sample. |
0 commit comments