Bug hunt 24: sixteen fixes from random-file sampling - #14601
Merged
Conversation
Format writers/readers that could not round-trip their own output:
- FLVCoreCuePoints, HoliStar JSON, JSON Type 5/7/17, OpenDVT wrote
milliseconds with the current culture ("1500,5") that their integer
readers rejected or split on the comma; write whole ms invariantly
- Unknown 2 wrote hundredths where the sample/reader expect ms
- Unknown 4 read the two-digit fraction as ms (22.50 -> 22.050 s)
- Unknown 3 wrote frame counts where the sample/reader expect ms
- Unknown 31 scaled the frames-within-foot field by the frame rate
- Unknown 45 rounded the seconds field up at >= .5 s and then appended
the frames of the same fraction (1.52 s -> 2.5 s)
- Unknown 50 read the frames field as ms
- Unknown 60 wrote an end-time line the reader took as the next cue's start
- Unknown 105 wrote [WAIT] before its text; the reader pairs text with
the FOLLOWING wait, so every cue took the next cue's timing (also
emit the first cue's offset)
- YouTube transcript one line: hour-long "1:01:01 text" matched the
minutes regex first and loaded as 1:01 with ":01 text" as the text
Other:
- ASSA style picker "Usages" column was bound to FontSize, and both
callers dropped the count when converting to SsaStyle
- Matroska TextST track "Export" wrote the raw undecoded payload as text
- AssaDraw DrawShape.ToAssa serialized a mixed line/bezier shape as one
"b" run, turning straight points into bezier control points
- HtmlUtil.FixInvalidItalicTags "FALCONE:" branch did Substring(0, -1)
for a bare "\n" on Windows (sibling branches were already guarded)
- PodcastIndexer read "speaker" raw although ToText JSON-escapes it
- DcPropertiesSmpte read all values raw although Save JSON-escapes them
Tests: tests/libse/SubtitleFormats/BugHunt24Test.cs,
tests/UI/Features/Assa/DrawShapeToAssaTests.cs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Twenty-fourth bug hunt: seeded random shuffle of all C# sources, five parallel reviewers over 24-file slices, plus a solo fractional-ms / comma-culture round-trip sweep over every text format. Every finding below was confirmed by execution before fixing.
Format writers/readers that could not round-trip their own output
1500,5under da-DK etc.); their integer readers dropped the cue or split on the comma. Now write whole ms invariantly.00:00:22.50→ 22.050 s).16 * footage.{0:00000}, rounding 1.52 s up to00002and then appending the frames of the 520 ms (→ 2.5 s).[WAIT]before its text, but the reader pairs text with the following wait, so every cue took the next cue's timing. The writer now also emits the first cue's offset.1:01:01 textmatched the minutes regex first and loaded as 1:01 with:01 textas the text.Other
FontSize; both callers also dropped the count when converting toSsaStyle, so "Take usages from…" showed font sizes.DrawShape.ToAssaserialized a mixed line/bezier shape as onebrun, turning straight points into bezier control points and shifting every later triplet.HtmlUtil.FixInvalidItalicTags"FALCONE:" branch didSubstring(0, -1)for a bare\non Windows; the sibling branches were already guarded for the same crash.speakerraw althoughToTextJSON-escapes it (likebody).SaveJSON-escapes them (C:\fonts\a.ttfreloaded doubled).Tests
tests/libse/SubtitleFormats/BugHunt24Test.cs(18 tests)tests/UI/Features/Assa/DrawShapeToAssaTests.cs(3 tests)Full libse suite green locally (1934 tests).
🤖 Generated with Claude Code