• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Eyevinn / go-608 / 30569833026
84%

Build:
DEFAULT BRANCH: main
Ran 30 Jul 2026 06:18PM UTC
Jobs 1
Files 35
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

30 Jul 2026 06:18PM UTC coverage: 84.207% (+0.3%) from 83.897%
30569833026

push

github

tobbee
fix(cta608): carry Decoder parse state across Feed calls

A Decoder fed one byte pair at a time decoded differently from one fed a whole
buffer. Every timed path feeds pair-by-pair -- that is what preserves per-frame
timing -- so this reached go608-extract, go608-info, and any consumer decoding
an mp4 or SCC frame by frame. Two 608 constructs straddle a pair boundary and
both were corrupted:

  - Extended characters lost their backspace-and-replace. An extended char is
    transmitted as a fallback char pair followed by the two-byte extended code,
    so in the timed path the two always land in different Feed calls and the
    backspace had nothing pending to remove. "CAFÉ ÀU LAIT" decoded as
    "CAFEÉ AÀU LAIT". This affects every mode, pop-on included, so any accented
    letter or curly quote in an mp4/SCC -> WebVTT conversion was wrong.

  - Doubled control codes were not collapsed across the boundary. Harmless for
    pop-on, where a second EOC/EDM/ENM is idempotent on the displayed screen,
    but a doubled roll-up CR scrolled twice and dropped a line: a 3-row roll-up
    decoded as r13="BBB", r14="", r15="CCC" instead of AAA/BBB/CCC.

Parse's collapse state lived in a parser value created fresh per call. Parse is
now a thin wrapper that still does exactly that -- so whole-buffer parsing and
Parse-then-Push callers are unchanged -- while Decoder owns one parser for its
lifetime. The extended-char case additionally needs the receiver to undo a
character it has already displayed, so parse now emits an explicit BS when the
fallback is no longer pending; that is CTA-608-E's backspace-and-replace as
described on the wire, not a workaround.

The internal/convert comment predicted the roll-up half of this and reasoned it
was harmless because go-608's own encode paths are pop-on. True for content
go-608 generates, but not for the third-party roll-up input go608-extract
exists to read; corrected.

18 of 18 new or added lines in 2 files covered. (100.0%)

3375 of 4008 relevant lines covered (84.21%)

0.97 hits per line

Jobs
ID Job ID Ran Files Coverage
1 30569833026.1 30 Jul 2026 06:18PM UTC 35
84.21
GitHub Action Run
Source Files on build 30569833026
  • Tree
  • List 35
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 2e7776d3 on github
  • Prev Build on main (#30562137444)
  • Next Build on main (#30572119609)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc