Bug 8876 - RadioTEENTALL station causes the controller to reboot
: RadioTEENTALL station causes the controller to reboot
Status: CLOSED FIXED
Product: SB Controller
Classification: Unclassified
Component: SqueezeNetwork
: unspecified
: PC Windows XP
: P1 normal (vote)
: 7.3
Assigned To: James Richardson
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2008-07-25 16:59 UTC by Osama Zaidan
Modified: 2008-12-15 12:05 UTC (History)
4 users (show)

See Also:
Category: ---


Attachments
cometd data that causes controller crash (124.51 KB, text/plain)
2008-07-28 09:52 UTC, Ben Klaas
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Osama Zaidan 2008-07-25 16:59:52 UTC
Connecting the controller to Squeezenetwork or Squeezecenter, if we choose some of the stations featured by RadioTEENTAAL.com, by going to  Shoutcast->By Genre->Desi, the controller will reboot itself. 
We verified this behavior on the lab 

Controller firmware r2448
Comment 1 Dan Evans 2008-07-25 17:15:11 UTC
My Controller is on 7.1r2722 and it also reboots if I play any of the 4 RadioTeenTAAL stations from Shoutcast > by Genre > Desi

I went to http://www.radioteentaal.com and tried playing their 128kbps stream manually.  It did not reboot.  Seems particular to whatever Shoutcast is handing us.
Comment 2 Chris Owens 2008-07-28 09:32:14 UTC
Ben notes this is a filesystem panic.
Comment 3 Ben Klaas 2008-07-28 09:33:43 UTC
Reproduced easily. Here's the console log of what's happening when hitting play on one of the RadioTEENTALL stations:

Jul 28 11:26:50 SqueezeboxController user.info jive: (NetworkThread.lua:249) - NOTIFY: playerModeChange(Player {Office SB3}, stop)
Jul 28 11:26:50 SqueezeboxController user.info jive: (NetworkThread.lua:249) - NOTIFY: playerTrackChange(Player {Office SB3}, RaDioTEENTAAL.com 100DiAn MuSiC LiVe FrOm PaRiS - Request your song ~ On Air ~ STEREO 128K Request your song ~ On Air ~ STEREO 128K RaDioTEENTAAL.com 100DiA
Jul 28 11:26:50 SqueezeboxController user.info jive: (NowPlayingApplet.lua:173) - Notification received that track has changed
Jul 28 11:26:50 SqueezeboxController user.info jive: (NetworkThread.lua:249) - NOTIFY: playerPlaylistChange(Player {Office SB3})
Jul 28 11:26:50 SqueezeboxController user.info jive: (SlimBrowserApplet.lua:882) - _menuSink()
Jul 28 11:26:50 SqueezeboxController user.err kernel: FAT: Filesystem panic (dev mmcblk0p1)
Jul 28 11:26:50 SqueezeboxController user.err kernel:     fat_free_clusters: deleting FAT entry beyond EOF
Jul 28 11:26:50 SqueezeboxController user.err kernel:     File system has been set read-only

No issues when hitting play on one of these streams from desktop build of squeezeplay.

Richard, any thoughts on the Filesystem panic? Bad character in a console message causing a kernel panic??

assigning to Richard, target to 7.2.
Comment 4 Ben Klaas 2008-07-28 09:52:50 UTC
Created attachment 3698 [details]
cometd data that causes controller crash

this is the cometd debug from SC when the controller connects to a player that currently has one of these TEENTALL streams in the Current Playlist.

The controller will crash just connecting to a player with this stream in a playlist. Looks like the playlist data in the playerstatus message is causing the crash.
Comment 5 Ben Klaas 2008-07-28 09:57:34 UTC
My guess is that this is the offending line that causes the crash. I'm going to look at scrubbing this in SC before sending out to the controller. Assigning to myself now, but Richard I'm curious if you have any thoughts on the really bad controller behavior here. A full crash on bad text?

text      => "RaDioTEENTAAL.com 100% InDiAn MuSiC LiVe FrOm PaRiS - Request your song ~ On Air ~ STEREO 128K\nRequest your song ~ On Air ~ STEREO 128K\nRaDioTEENTAAL.com 100% InDiAn MuSiC LiVe FrOm PaRiS",
Comment 6 Ben Klaas 2008-07-28 11:02:21 UTC
I've completely isolated the crash to the text (stream title) string that is sent in the playerstatus message from SC->SBC

tried using URI::Encode::uri_encode on the text string to see if I could properly encode the string and avert the crash.

$text = uri_encode($text);

yields this sent to the controller:

 RaDioTEENTAAL.com%20100%25%20InDiAn%20MuSiC%20LiVe%20FrOm%20PaRiS%20-%20Request%20your%20song%20~%20On%20Air%20~%20STEREO%20128K%0ARequest%20your%20song%20~%20On%20Air%20~%20STEREO%20128K%0ARaDioTEENTAAL.com%20100%25%20InDiAn%20MuSiC%20LiVe%20FrOm%20PaRiS

but the controller still crashes

tried uri_encode_utf8() to same effect

also tried this, recommended as a "very safe" encoding method in URI::Encode docs
$text = uri_escape($text, "\0-\377");

this fixed the crash, but now causes the text of the stream to show up on the controller like this:
 %52%61%44%69%6F%54%45%45%4E%54%41%41%4C%2E%63%6F%6D%20%31%30%30%25%20%49%6E%44%69%41%6E%20%4D%75%53%69%43%20%4C%69%56%65%20%46%72%4F%6D%20%50%61%52%69%53%20%2D%20%52%65%71%75%65%73%74%20%79%6F%75%72%20%73%6F%6E%67%20%7E%20%4F%6E%20%41%69%72%20%7E%20%53%54%45%52%45%4F%20%31%32%38%4B%0A%52%65%71%75%65%73%74%20%79%6F%75%72%20%73%6F%6E%67%20%7E%20%4F%6E%20%41%69%72%20%7E%20%53%54%45%52%45%4F%20%31%32%38%4B%0A%52%61%44%69%6F%54%45%45%4E%54%41%41%4C%2E%63%6F%6D%20%31%30%30%25%20%49%6E%44%69%41%6E%20%4D%75%53%69%43%20%4C%69%56%65%20%46%72%4F%6D%20%50%61%52%69%53

There's an offending character in these TEENTALL stream titles, but nothing I've done thus far has been successful in sanitizing it to a no-crash, readable string on the controller. :-/
Comment 7 Ben Klaas 2008-07-28 13:00:05 UTC
hmmm...well, it's the % symbol in the string that's causing the crash

"RaDioTEENTAAL.com 100% InDiAn MuSiC LiVe FrOm PaRiS - Request
your song ~ On Air ~ STEREO 128K\nRequest your song ~ On Air ~ STEREO
128K\nRaDioTEENTAAL.com 100% InDiAn MuSiC LiVe FrOm PaRiS"

no crash if I remove the % from the string before sending like so:
$text =~ s/\%//g;

but I have yet to figure a way of encoding that % sign so as not to either cause a crash or to render incorrectly.
Comment 8 Richard Titmuss 2008-07-28 13:18:59 UTC
If you use this string directly on the controller does it cause a crash? I'm trying to establish if it's a rendering issue, of a networking issue.

Also you might try valgrind on the desktop.
Comment 9 Ben Klaas 2008-07-28 13:51:47 UTC
I hardcoded the NowPlaying applet to show the string for the trackinfo no matter what was playing. No crash. So...JSON munging it?

Put in a log:warn() message in SlimBrowser when items in playlist menu are being constructed. the % sign and the three chars after it-- '% In' -- do not appear at all in the warn message, which makes me think that it's reading '% In' as a URI entity?

Jul 28 15:46:13 SqueezeboxController user.warn jive: (SlimBrowserApplet.lua:1072) - RaDioTEENTAAL.com 100DiAn MuSiC LiVe FrOm PaRiS - Request your song ~ On Air ~ STEREO 128K Request your song ~ On Air ~ STEREO 128K RaDioTEENTAAL.com 100DiAn MuSiC LiVe FrOm PaRiS

also, maybe I'm dense but not sure how valgrind on the desktop will help since the crash doesn't occur on the desktop?
Comment 10 Ben Klaas 2008-07-28 14:51:51 UTC
additional info-- same log:warn() message on desktop squeezeplay shows the entire string correctly:

164921:632 WARN (SlimBrowserApplet.lua:1072) - RaDioTEENTAAL.com 100% InDiAn MuSiC LiVe FrOm PaRiS - Request your song ~ On Air ~ STEREO 128K
Request your song ~ On Air ~ STEREO 128K
RaDioTEENTAAL.com 100% InDiAn MuSiC LiVe FrOm PaRiS
Comment 11 Ben Klaas 2008-07-28 14:59:52 UTC
Calling in the big guns, assigning to Richard.

IMO, two things need to happen

1. (SC side) SC never sends a string that the controller balks at
2. (Jive side) The controller doesn't fall on its face if it does get an offending string

Comment 12 Richard Titmuss 2008-07-31 16:09:31 UTC
This is caused by a crash in lsyslog, due to a floating % format specifier. The arm syslog call must be more sensitive than the desktop version to the format string. I think this code needs rewriting to use vsyslog.
Comment 13 Richard Titmuss 2008-08-01 00:20:43 UTC
Fixed in r2751. The crash is easy to reproduce on the desktop when using lsyslog to log to the syslog, this library is normally only used on the jive.

No SC changes are needed.
Comment 14 James Richardson 2008-10-13 13:29:58 UTC
I still get my controller with 7.2 r3080 to reboot on a few of the stations listed in SHOUTcast.

tested & failed:
4) Bollywood Music Radio old is gold

the controller will intermittently reboot when playing that or other stations.  it's not a 100% failure
Comment 15 Richard Titmuss 2008-10-30 04:58:06 UTC
James, I can't find "Bollywood Music Radio old is gold" in shoutcast now. Can you point me at it, or another stream that still crashes the Controller? Thanks.

Comment 16 James Richardson 2008-11-10 16:02:43 UTC
Retested with Falco / SC 7.3r23875 and SBC r3309.

Unable to reproduce the error with this combo.  Marking bug as fixed, if you are able to reproduce, please reopen.
Comment 17 James Richardson 2008-12-15 12:05:36 UTC
This bug has been fixed in the 7.3.0 release version of SqueezeCenter!

Please download the new version from http://www.slimdevices.com/su_downloads.html if you haven't already.  

If you are still experiencing this problem, feel free to reopen the bug with your new comments and we'll have another look.