Opened 19 years ago
Closed 19 years ago
#1423 closed defect (duplicate)
assert failure in CC708Decoder::decode_cc_data / parse_cc_packet
Reported by: | Robert Tsai <rtsai1111> | Owned by: | Isaac Richards |
---|---|---|---|
Priority: | minor | Milestone: | unknown |
Component: | mythtv | Version: | head |
Severity: | medium | Keywords: | |
Cc: | Ticket locked: | no |
Description
I have a slightly damaged OTA HD recording that triggers this assert when running mythcommflag against it; it looks like the data contains something unexpected:
(gdb) bt #0 0x00002aaaae6480fd in raise () from /lib/libc.so.6 #1 0x00002aaaae64982e in abort () from /lib/libc.so.6 #2 0x00002aaaae6418d1 in __assert_fail () from /lib/libc.so.6 #3 0x00002aaaab20d212 in parse_cc_packet (cb_cbs=0x69fd38, pkt=0x6e9fe0) at cc708decoder.cpp:584 #4 0x00002aaaab20d35d in CC708Decoder::decode_cc_data (this=0x6e9fe0, cc_type=3, data1=195, data2=34) at cc708decoder.cpp:67 #5 0x00002aaaab3044e5 in decode_cc_atsc (s=0x706ff0, buf=0x2aaab5a5f02b "J", sz=9379) at avformatdecoder.cpp:1548 #6 0x00002aaaabddb1b2 in mpeg_decode_user_data (avctx=0xffffffffffffffff, buf=0x69d8 <Address 0x69d8 out of bounds>, buf_size=6) at mpeg12.c:2977 #7 0x00002aaaabddb66f in mpeg_decode_frame (avctx=0x706ff0, data=Variable "data" is not available. ) at mpeg12.c:3150 #8 0x00002aaaabd256d7 in avcodec_decode_video (avctx=0x706ff0, picture=0x7fffff835c60, got_picture_ptr=0x7fffff835e1c, buf=0x2aaab5a5f010 "", buf_size=9406) at utils.c:948 #9 0x00002aaaab31330b in AvFormatDecoder::GetFrame (this=0x6e8f80, onlyvideo=1) at avformatdecoder.cpp:2627 #10 0x00002aaaab2d4620 in NuppelVideoPlayer::GetFrameNormal (this=0x69fd30, onlyvideo=1) at NuppelVideoPlayer.cpp:1020 #11 0x00002aaaab2d5278 in NuppelVideoPlayer::GetFrame (this=0x69fd30, onlyvideo=1, unsafe=true) at NuppelVideoPlayer.cpp:1098 #12 0x00002aaaab2e5d37 in NuppelVideoPlayer::GetRawVideoFrame (this=0x69fd30, frameNumber=-1) at NuppelVideoPlayer.cpp:4442 #13 0x0000000000425d17 in ClassicCommDetector::go (this=0x6e7630) at ClassicCommDetector.cpp:350 #14 0x000000000040a88e in DoFlagCommercials (showPercentage=false, fullSpeed=true, inJobQueue=true, nvp=0x69fd30, commDetectMethod=255) at main.cpp:448 #15 0x000000000040c362 in FlagCommercials (chanid=@0x7fffff837eb0, starttime=@0x7fffff837ea0) at main.cpp:624 #16 0x000000000040fcc2 in main (argc=3, argv=0x7fffff838308) at main.cpp:970 (gdb) l parse_cc_packet 556 } 557 #endif 558 parse_cc_service_stream(cc, service_num); 559 } 560 561 static void parse_cc_packet(CC708Reader* cb_cbs, CaptionPacket* pkt) 562 { 563 const unsigned char* pkt_buf = pkt->data; 564 const int pkt_size = pkt->size; 565 int off = 1; 566 int service_number = 0; 567 int block_data_offset = 0; 568 int len = ((((int)pkt_buf[0])&0x3f)*2-1)&0xff; 569 int seq_num = (((int)pkt_buf[0])>>6)&0x3; 570 571 #if DEBUG_CC_RAWPACKET 572 { 573 int j; 574 fprintf(stderr, "CC length(%2i) seq_num(%i) ", len, seq_num); 575 for (j = 0; j < pkt_size; j++) 576 fprintf(stderr, "0x%x ", pkt_buf[j]); 577 fprintf(stderr, "\n"); 578 } 579 #else 580 (void) seq_num; 581 #endif 582 583 assert(pkt_size<127); 584 assert(len<128); 585 (gdb) p /x len $17 = 0xff (gdb) p /x pkt_buf[0] $18 = 0x80 (gdb) p (((int)pkt_buf[0])&0x3f)*2-1 $19 = -1
I can't help debug this, but I can help test a patch, since I have a recording that seems to always trigger this assert failure. FWIW, this is last night's broadcast of Fox 24.
Change History (3)
Note: See
TracTickets for help on using
tickets.
(In [9210]) Fixes #1423. Fixes segfault by printing out debug info rather than crashing.