sectionsd: Aborted - offenbar bug bei EPG einiger Sender.

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

sectionsd: Aborted - offenbar bug bei EPG einiger Sender.

Beitrag von zexma »

Mit cvs 15.08 (edit: cvs 26.08 ebenso) scheints einen bösen ( :D ) bug im(?) sectionsd(?) zu geben.
Bei Aufruf des EPGs einiger Sender mittels 2x "?" hauts das komplette System weg.
Leider ist das LOG nicht sehr aufschlußreich.
Der Fehler läßt sich z.Zt. jederzeit reproduzieren z.B. auf
- dem kompletten WDR-Paket (Aachen, Düsseldorf etc., Sendung z.Zt: "Route 181")
- beim verschlüsselten SF2 ( :gruebel: )
getestet auf Nokia und Philips (jeweils AVIA600).
PES, queue 0 normal.
[controld] VIDEO_EVENT_SIZE_CHANGED 720x576 (4:3 -> 16:9)
PES, queue 0 normal.
[controld] VIDEO_EVENT_SIZE_CHANGED 720x576 (16:9 -> 4:3)
PES, queue 0 normal.
Aborted

killall: Could not kill pid '82': No such process
killall: Could not kill pid '83': No such process
zapit shot down :)
...
Kann das bitte mal noch jemand verifizieren?
P.S. Bei EPG-Aufruf mittels "Rot" + "?" ists das Gleiche.
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

zexma hat geschrieben:Kann das bitte mal noch jemand verifizieren?
P.S. Bei EPG-Aufruf mittels "Rot" + "?" ists das Gleiche.
Ja, ist hier auch so.

Neutrino:

Code: Alles auswählen

[neutrino] initialized everything
[LCDFONT] FTC_Face_Requester (Fix12/Regular)
Aborted
Sectionsd:

Code: Alles auswählen

[sectionsd] readNbytes: received POLLERR
[sectionsd] readNbytes: received POLLERR
[sectionsd] readNbytes: received POLLERR
[sectionsd] readNbytes: received POLLERR
gdb auf Neutrino bring noch:

Code: Alles auswählen

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 166)]
std::string::assign (this=0x7ffff1c0, __s=0x101a3b0f "", __n=0) at basic_string.h:174
Ist zwar nicht viel, aber vllt hilft das.

Gruß
mogway
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

kann ich bestätigen
beim ersten mal sehe ich noch den kompletten EPG Eintrag
dann nur noch z.B.: Spielfilm USA und das Genre
bis irgendwann Neutrino abstürzt (Abort)
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Wollte es gestern nicht so laut sagen daß ich nicht glaube daß es an meinen Änderungen liegt, aber scheinbar hat WDR regional da einen (für die DBOX) faulen EPG.
Das Zweite Event hat im info1 nur "2." somit geht die weitere Bearbeitung über das Stringende hinaus und epgData.info1.length() - nPosDot wird negativ -> Bingo

Folgende Änderung verhindert den Abkacker:

Code: Alles auswählen

diff -ur -x CVS apps.050826/tuxbox/neutrino/src/gui/epgview.cpp apps/tuxbox/neutrino/src/gui/epgview.cpp
--- apps.050826/tuxbox/neutrino/src/gui/epgview.cpp	2005-08-15 14:09:17.000000000 +0200
+++ apps/tuxbox/neutrino/src/gui/epgview.cpp	2005-08-27 22:42:25.000000000 +0200
@@ -409,7 +409,6 @@
 	int res = menu_return::RETURN_REPAINT;
 	static unsigned long long id;
 	static time_t startzeit;
-	 
 
 	if(a_startzeit)
 		startzeit=*a_startzeit;
@@ -476,7 +475,9 @@
 			std::string::size_type nPosDot = epgData.info1.find('.');
 			if (std::string::npos != nPosDot) {
 				nPosDot += 2; // Skip dot and first blank
-				if (nPosDot < epgData.info2.length()) {	// Make sure we don't overrun the buffer
+/*	Houdini: changed for safty reason (crashes with some events at WDR regional)
+			if (nPosDot < epgData.info2.length()) {*/	// Make sure we don't overrun the buffer
+				if (nPosDot < epgData.info2.length() && nPosDot < epgData.info1.length()) {	// Make sure we don't overrun the buffer
 					// Check if the stuff after the dot equals the beginning of info2
 					if (0 == epgData.info2.find(epgData.info1.substr(nPosDot, epgData.info1.length() - nPosDot))) {
 						strEpisode = epgData.info1.substr(0, nPosDot) + "\n";
Vielleicht kann mir mal jemand bei der Gelegenheit diese Zeile erklären:

Code: Alles auswählen

			if (std::string::npos != nPosDot) {
JtG-Riker
Image-Team
Beiträge: 1015
Registriert: Freitag 7. Februar 2003, 18:37

Beitrag von JtG-Riker »

mogway hats schon eingecheckt, thx

Riker
ChakaZulu
Developer
Beiträge: 457
Registriert: Sonntag 23. März 2003, 00:39

Beitrag von ChakaZulu »

hi,
Houdini hat geschrieben: Vielleicht kann mir mal jemand bei der Gelegenheit diese Zeile erklären:

Code: Alles auswählen

			if (std::string::npos != nPosDot) {
npos ist sowas wie "no pos", es ist ein Fehlerwert oder eine ungültige Position. find hat in diesem Fall also nichts gefunden.

ciao,

ChakaZulu
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

@Chakazulu: Danke
Ich habe nochmal überlegt, der obige Fehler müsste eigentlich immer kommen, wenn info1 genau einen Punkt im String enthält und dieser am Ende sitzt. Also unter umständen doch ziemlich oft
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

Houdini hat geschrieben:Wollte es gestern nicht so laut sagen daß ich nicht glaube daß es an meinen Änderungen liegt, aber scheinbar hat WDR regional da einen (für die DBOX) faulen EPG.
Das Zweite Event hat im info1 nur "2." somit geht die weitere Bearbeitung über das Stringende hinaus und epgData.info1.length() - nPosDot wird negativ -> Bingo
Kannste Dir das auch bitte nochmal auf SF2 (bzw. z.Zt. SF1) anschauen?
Also ic meine obs die gleiche Ursache ist wie bei WDR.
Zur Zeit tritt der Fehler auf WDR ja nicht auf.
Dafür aber gerade auf SF1(!). Da läuft wohl gerade "Goldfinger".
Machen die auch so'n Driss mit dem EPG-Event "."?
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Hab deinen Reply gestern nicht mehr gesehen :-(