Opened 10 years ago

Closed 10 years ago

#9919 closed Bug Report - Crash (fixed)

LogPrintLine leads to crash

Reported by: Jim Stichnoth <stichnot@…> Owned by: beirdo
Priority: minor Milestone: 0.25
Component: MythTV - General Version: Master Head
Severity: medium Keywords:
Cc: Ticket locked: no


Logging a string containing a '%' character can lead to a crash.

#0  0x04932a58 in wcslen () from /lib/tls/i686/cmov/
#1  0x04933c3d in wcsrtombs () from /lib/tls/i686/cmov/
#2  0x048f72c4 in vfprintf () from /lib/tls/i686/cmov/
#3  0x04916460 in vsnprintf () from /lib/tls/i686/cmov/
#4  0x01745fc1 in LogPrintLine (mask=32768, level=LOG_INFO,
    file=0x947a8f "subtitlescreen.cpp", line=763,
    function=0x947ec4 "DisplayCC608Subtitles",
    format=0x8f3e0c0 "x 0 y 15 uline=0 ital=0 color=0 coord=102,610 String: 'ABOUT 78% SURE.'") at mythlogging.cpp:758
#5  0x006448d8 in SubtitleScreen::DisplayCC608Subtitles (this=0xae984ae0)
    at subtitlescreen.cpp:761
#6  0x006404da in SubtitleScreen::Pulse (this=0xae984ae0)
    at subtitlescreen.cpp:97
#7  0x00634509 in OSD::DrawDirect (this=0x8da0930, painter=0x8ebc050,
    size=..., repaint=true) at osd.cpp:565
#8  0x006a6f64 in VideoOutputVDPAU::PrepareFrame (this=0xa993e278,
    frame=0x94b9c68, scan=kScan_Interlaced, osd=0x8da0930)
    at videoout_vdpau.cpp:506
#9  0x005ad377 in MythPlayer::AVSync (this=0xac71788, buffer=0x94b9c68,
    limit_delay=false) at mythplayer.cpp:1741
#10 0x005b0a0a in MythPlayer::DisplayNormalFrame (this=0xac71788,
    check_prebuffer=true) at mythplayer.cpp:2054
#11 0x005b160e in MythPlayer::VideoLoop (this=0xac71788)
    at mythplayer.cpp:2205

Change History (2)

comment:1 Changed 10 years ago by Raymond Wagner

Milestone: unknown0.25
Owner: set to beirdo
Status: newassigned

comment:2 Changed 10 years ago by Github

Resolution: fixed
Status: assignedclosed

Fix log messages containing %

Fixed #9919

The issue here is that after the fully formatted QString is converted to a char *, it is still run through vsnprintf as that is common code with the C implementation. To fix this, I have added a regexp-based replace in the macro that will convert "%" or "%%" to "%%". This will account for places we already put "%%" into the QString, and for those we did not.

Branch: master Changeset: 58b0909d5f4018418b3fa200eab1975813446e9c

Note: See TracTickets for help on using tickets.