[BUG]

Wünsche, Anträge, Fehlermeldungen
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [BUG]

Beitrag von GetAway »

rhabarber1848 hat geschrieben:Welches Problem wird mit diesem Patch behoben?
Hi, ohne explizites break werden die Anweisungen zur Suche nach einer Übereinstimmung
und alle nachfolgenden Anweisungen innerhalb von switch so lange ausgeführt, bis ein break
oder das Ende von switch erreicht ist (danach wird die Ausführung nach dem Ende von switch
fortgesetzt). In diesem Fall kommt es dabei zur Überlappung mit default. Das macht zwar in
diesem Fall nichts kaputt, ist aber meiner Meinung nach eine schlechte Programmierung.
Übrigens war das oben falsch von mir. So sollte das aussehen:

Code: Alles auswählen

loop =  false;
break;
Striper
Erleuchteter
Erleuchteter
Beiträge: 625
Registriert: Samstag 8. September 2007, 16:17

Re: [BUG]

Beitrag von Striper »

Ich hab mir das grade angesehen. Der "break" ist bereits an der richtigen Stelle. :gruebel:
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [BUG]

Beitrag von GetAway »

Hi, da ich nicht weiß welches break du meinst, rate ich mal. Das da drüber!?
Das greift nur, wenn du bei Home abbrichst.
Striper
Erleuchteter
Erleuchteter
Beiträge: 625
Registriert: Samstag 8. September 2007, 16:17

Re: [BUG]

Beitrag von Striper »

Hm, wo soll da noch ein break hin?

Code: Alles auswählen

		case CRCInput::RC_home:
			if (((*value[VALUE_R] != r_alt) || (*value[VALUE_G] != g_alt) || (*value[VALUE_B] != b_alt) || ((value[VALUE_ALPHA]) && (*(value[VALUE_ALPHA]) != a_alt))) &&
			    (ShowLocalizedMessage(name, LOCALE_MESSAGEBOX_DISCARD, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbCancel) == CMessageBox::mbrCancel))
				break;

				// sonst abbruch...
				*value[VALUE_R] = r_alt;
				*value[VALUE_G] = g_alt;
				*value[VALUE_B] = b_alt;
				if (value[VALUE_ALPHA])
					*value[VALUE_ALPHA] = a_alt;

			case CRCInput::RC_timeout:
				loop = false;
				break;

			case CRCInput::RC_ok:
				if (msg == CRCInput::RC_ok) // ignore repeat
					loop = false;
				break;

			default:
				if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all)
				{
					loop = false;
					res = menu_return::RETURN_EXIT_ALL;
				}
		}
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [BUG]

Beitrag von seife »

Naja. Bei einem absichtlichen Fallthrough *könnte* man wenigstens nen Kommentar hinmachen.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: [BUG]

Beitrag von rhabarber1848 »

seife hat geschrieben:Naja. Bei einem absichtlichen Fallthrough *könnte* man wenigstens nen Kommentar hinmachen.
Ich vermute in diesem Fall einen fallthrough.
Mit diesem commit kam die o.g. Funktion 2002 ins CVS:
http://cvs.tuxbox-cvs.sourceforge.net/t ... 12&r2=1.13

case CRCInput::RC_home:
case CRCInput::RC_timeout:
case CRCInput::RC_ok:
war vorher der else-Teil einer if/else-Anweisung.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [BUG]

Beitrag von GetAway »

@seife
sectionsd.cpp: Fehlt da ein free(val);

Code: Alles auswählen

static void commandRestart(int connfd, char * /*data*/, const unsigned /*dataLength*/)
{
	struct sectionsd::msgResponseHeader responseHeader;
	responseHeader.dataLength = 0;
	char * buf = (char*)malloc(64);
	char *val = (char*)malloc(32);	// needed for SETENV?-macros
	int count;
	if (val && buf && (count = readlink("/proc/self/exe", buf, 63)) >= 0) {
		buf[count] = '\0';
		printf("re-starting %s\n", buf);
        } else {
		fprintf(stderr, "[sectionsd] commandRestart: cannot determine who i am\n");
		writeNbytes(connfd, (const char *)&responseHeader, sizeof(responseHeader), WRITE_TIMEOUT_IN_SECONDS);
		return;
	}
	/* if we close filedescriptors here, the 2.4 kernel hangs hard when we
	   close the two pipe fds probably created by the old threading
	   implementation. We close them instead at startup.
	for (int i = 3; i < 256; i++)
		close(i);
	 */
	SETENVI(auto_scanning);
	SETENVL(secondsToCache);
	SETENVL(oldEventsAre);
	SETENVL(secondsExtendedTextCache);
	SETENVI(max_events);
	SETENVI(ntprefresh);
	SETENVI(ntpenable);
	SETENVS(ntp_system_cmd);
	SETENVS(epg_dir);
	SETENVB(update_eit);
	SETENVB(bTimeCorrect);
	SETENVB(debug);
	writeNbytes(connfd, (const char *)&responseHeader, sizeof(responseHeader), WRITE_TIMEOUT_IN_SECONDS);
	unlink(SECTIONSD_UDS_NAME);
	char* const p[3] = { buf, "-p", NULL };
	fprintf(stderr,"[sectionsd] starting '%s'\n",buf);
	execv(buf, p);
	perror("[sectionsd] commandRestart execv");
	fprintf(stderr, "[sectionsd] ERROR! This is impossible!\n\n");
	free(buf);
}
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [BUG]

Beitrag von seife »

Im prinzip ja. Kannst eins neben das free(buf) machen.
Allerdings kommt der Code eh nie dort hin.

Der Sinn des ganzen ist ja, die vergessenen free()'s zu ersetzen ;-)
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [BUG]

Beitrag von GetAway »

fix possible resource leak in flashtool.cpp

fix_resource_leak_flashtool.diff
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: [BUG]

Beitrag von rhabarber1848 »