PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reproduzierbarer FF3 Absturz debugen



kater
31-12-2008, 12:52
Hai,
gestern habe ich mein neues Primzahlenbild fertig bekommen, habe es hochgeladen und wollte es mir mit dem FF3 unter Linux anschauen. Nur leider stürzt er dabei ab. Unter Windows nicht. :) Also hab ich mit den gdb debuger geschnappt und es auch geschafft ein brauchbares backtrace nach 3h zu erzeugen.

Das Bild ist übrigends sehr groß, 50000 Pixel in der Höhe, da steigen schon ein paar Bildbetrachter aus :)

Nun, ich will euch hier nicht den backtrace aufhalsen, da bestimmt kein X-Windows Entwickler hier ist, aber ich habe die Funktion isoliert, wo der Fehler wahrscheinlich auftritt.



Pixmap XCreatePixmap (
register Display *dpy,
Drawable d,
unsigned int width,
unsigned int height,
unsigned int depth)
{
Pixmap pid;
register xCreatePixmapReq *req;

LockDisplay(dpy);
GetReq(CreatePixmap, req);
req->drawable = d;
req->width = width;
req->height = height;
req->depth = depth;
pid = req->pid = XAllocID(dpy);
UnlockDisplay(dpy);
SyncHandle();
#ifdef USE_DYNAMIC_XCURSOR
if (depth == 1)
_XNoticeCreateBitmap (dpy, pid, width, height);
#endif
return (pid);
}


In der Variable height sind wahrscheinlich die 50000 drinne. Die konnte ich aber nicht mit dem debuger aufrufen, da wegoptimiert. Ja, ich vermisse irgendwie die Funktion, wo das Pixmap erzeugt wird. Ich kenne das so, dass man in eine Variable, hier req die Abmessungen des Bildes etc. reinschreib, diese Variable dann einer createPixmax() übergibt, und die liefert einem dann das "Bild".

Nur hier ist das anders. Laut debuger ruft er SyncHandle() auf, welche dann die Error Behandlungsfunktionen aufruft. Aber die eigentliche Stelle wo der Fehler auftritt, ein BadAlloc (Das Bild ist aber auch gross um dem geht wohl der Speicher aus), die sehe ich nicht.

Das Programm läuft aber auch in 2 weiteren Threats. Aber wie ich das mit dem Debuger behandeln kann, weiss ich auch nicht. Das ist das erstemal, dass ich einen debuger benutze und bin schon erstaut wie weit ich bisher kam.

Hat jemand eine Idee, wie oder wo ich hier weiter machen kann?

Das System ist ein Debian testing und das Bild findet ihr hier
geeksden.sf.net/testbild.png aber Vorsicht, der Browser kann wirklich abstürzen ;)

Die libpng steigt mit einem CRC Error aus, aber die wird hier glaube ich nicht benutzt.

Grüße und coolen Rutsch :)

undefined
31-12-2008, 14:54
FF3 nippelt bei mir auch ab.
KDE3 Konqueror zeigt das Bild ohne Probleme an.
Opera lädt es - zeigt es aber nicht an.
Ich kenne mich mit X wenig aus.
Aber es gibt unterschiede beim Preload verhalten von ff zu kde.
KDE zeigt ein Bild erst nach einer gewissen Prozent Anzahl an.
Firefox versucht immer sehr schnell ein Bild auf zu bauen.

kater
31-12-2008, 16:11
@undefined Hast du 64Bit? Das macht hier wohl ein Unterschied.

undefined
31-12-2008, 16:14
Nein 32bit System

panzi
01-01-2009, 02:49
Bin ich blind oder gibts keinen Link zum Bild? Ist das sowas ähnliches wie ich da (http://twoday.tuwien.ac.at/pub/stories/318738/) gemacht hab?

bischi
01-01-2009, 09:54
Iceweasel 2.0.0.18:


The image “http://geeksden.sourceforge.net/testbild.png” cannot be displayed, because it contains errors.

MfG Bischi :D

kater
01-01-2009, 10:56
Bin ich blind oder gibts keinen Link zum Bild? Ist das sowas ähnliches wie ich da (http://twoday.tuwien.ac.at/pub/stories/318738/) gemacht hab?

Ja genau sowas, nur ist mein Bild 50000 Pixel hoch.

ContainerDriver
01-01-2009, 14:24
Mit GIMP lässt sich das Bild öffnen...

panzi
03-01-2009, 01:47
Mit GIMP lässt sich das Bild öffnen...
GIMP kann den Entwicklern sei Dank viele Bilder reparieren. Meine Mama hat z.B. einen HP Scanner bei dem das OS X Scann Programm das dabei war kaputte PNGs generiert. GIMP kann die öffnen und repariert speichern.

panzi
03-01-2009, 22:33
Ich habe leider keine Lösung deines Problemes aber ich kann bestätigen, dass es kein kaputtes PNG ist, das FF zum Absturz bringt, sondern ganz einfach eine PNG von dieser Größe. Ich habe nämlich aus diesem Anlass auch so ein Bild generiert (http://twoday.tuwien.ac.at/pub/files/419x50000) und das crasht FF genau so (also Vorsicht beim Klicken des Links).

ContainerDriver
03-01-2009, 23:35
Unter https://bugzilla.mozilla.org/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&content=png finden sich zahlreiche Einträge zu diesem (bzw. einem ähnlichen) Problem. Vielleicht sollte man dort mal darauf hinweisen, dass das Problem immer noch besteht.

kater
04-01-2009, 06:40
Unter https://bugzilla.mozilla.org/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&content=png finden sich zahlreiche Einträge zu diesem (bzw. einem ähnlichen) Problem. Vielleicht sollte man dort mal darauf hinweisen, dass das Problem immer noch besteht.

Ja ich hab mir mal ein paar angeschaut. Viele sind miterlweile gefixt worden. Bei den anderen, die große Bilder betreffen, da blick ich nicht mehr durch welcher Bug den nun der aktuelleste ist.

@panzi Ich hab dein Bild ausprobiert und es verursacht genau den selben Stack im Debuger. Es wird wohl, wie der eine Typ da gesagt hat, irgendeiner Variable überlaufen. Nur ich finde die entsprechende Stelle im Code nicht, sonst könnte man da einfach ein Test einbauen.

bischi
04-01-2009, 09:32
Auch beim zweiten Bild bekomm ich mit iceweasel (firefox) 2.0.0.18 die folgende Fehlermeldung (ohne Absturz):


The image “http://twoday.tuwien.ac.at/static/pub/files/419x50000.png” cannot be displayed, because it contains errors.

Scheint also ein Problem mit den neueren Versionen zu sein...

MfG Bischi

panzi
04-01-2009, 15:38
Auch beim zweiten Bild bekomm ich mit iceweasel (firefox) 2.0.0.18 die folgende Fehlermeldung (ohne Absturz):



Scheint also ein Problem mit den neueren Versionen zu sein...

MfG Bischi

Ja nur ist das Bild nicht Fehlerhaft. Es ist verdammt groß, ja. Aber nicht Fehlerhaft. Natürlich ist eine falsche Fehlermeldung um Welten besser als ein Crash, da ein Crash auf ein schlimmeres Problem hinweißt und eventuell zum Einschmuggeln von Code ausgenutzt werden kann.

bischi
04-01-2009, 18:41
Ich hab jetzt auf die Schnelle nichts gefunden - aber könnte es nicht auch sein, dass es im PNG-Standard irgendwo eine Maximalgrösse gibt?

MfG Bischi

PS: Hab gerade das hier noch gefunden:

The PNG format uses a 32-bit field to store the width and height, so that's
not the problem. However, GDI in Windows uses signed 16-bit values in some
cases for physical coordinates, which limits you to 32,767.

kater
04-01-2009, 20:20
Ich hab jetzt auf die Schnelle nichts gefunden - aber könnte es nicht auch sein, dass es im PNG-Standard irgendwo eine Maximalgrösse gibt?


Jein. Aber Gimp kann es doch auch öffnen. Vllt. komme ich die Tage mal dazu den FF2 zu debugen.

bischi
04-01-2009, 20:24
Jein. Aber Gimp kann es doch auch öffnen.

Was denkst du, wie viele Websites du öffnen kannst, ohne dass sie auch nur annähernd einem Standard entsprechen? ;)

MfG Bischi

panzi
05-01-2009, 16:03
Was denkst du, wie viele Websites du öffnen kannst, ohne dass sie auch nur annähernd einem Standard entsprechen? ;)
Nur sind Webseiten Text und PNG ist ein Binärformat. Wenn da ein Feld 32bit groß ist, dann ist es 32bit. Es gibt keine Möglichkeit zu erkennen das DIESE PNG Datei mehr als 32bit verwendet. Und 50000 geht sich in 16bit aus (unsigned). (50000*419 benötigt 32bit, auch unsigned)

bischi
05-01-2009, 16:25
Nur sind Webseiten Text und PNG ist ein Binärformat. Wenn da ein Feld 32bit groß ist, dann ist es 32bit. Es gibt keine Möglichkeit zu erkennen das DIESE PNG Datei mehr als 32bit verwendet. Und 50000 geht sich in 16bit aus (unsigned). (50000*419 benötigt 32bit, auch unsigned)

Da hast du natürlich völlig recht. Was ich eigentlich sagen wollte:

Es könnte ja sein, dass der PNG Standard eine Maximalbreite von bspw. 30'000 Pixel definiert - allerdings das Feld zum Abspeichern der Breite 32bit gross ist. Dann kannst du da eine Maximalbreite von 4.3EE9 angeben (die passt da rein, ist aber nicht Standardkonform). Oder eben beispielsweise 50'000. Ein Programm wie Gimp könnte theoretisch fehlerfrei die 50'000 Pixel anzeigen, wenn es denn will. Dies heisst dann aber bei weitem noch nicht, dass das Bild auch standardkonform ist - obwohl es korrekt angezeigt werden kann.

MfG Bischi

kater
05-01-2009, 16:39
Tja, da hab ich mich mal schnell schlau gemacht. Für die Höhe und Breite sind 4Byte Variablen zugelassen [1]. Also sind 50000px erlaubt.

http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html