Multipart Parser

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Ich hab die letzten zwei Tage einen multipart/form-data Parser von Grund auf neu implementiert, der auch unter Python 3 funktioniert und cgi.FieldStorage() in Bottle ablösen soll. Damit wäre die letzte verbleibende Inkompatibilität zu Python 3 beseitigt (cgi.FieldStorage will unicode haben und verschluckt Newlines) und auch einige andere Dinge besser gelöst als mit cgi.FieldStorage().

Wenn jemand von euch Erfahrung mit kaputten Browsern hat, wäre es nett wenn ihr ein paar Test-Szenarien bei steuern könntet. Die Tests aus werkzeug/test/test_formparser.py und die Bottle-eigenen Tests besteht meine Implementierung bereits.

Ich weiß das:
- setuptools Leerzeilen vor dem ersten Separator ein baut.
- Chrome ab und zu den Content-Type header unterschlägt.
- Internet Explorer den Filename-Parameter des Content-Disposition Headers falsch befüllt.
- manche Browser keine Content-Length angeben.
- der Separator unter Umständen auch innerhalb des Datenbereichs vor kommen kann.
- manche Bibliotheken \n statt \r\n verwenden.

Kennt ihr noch andere Browser-Bugs was das multipart/form-data Format an geht?
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Der Parser ist ab sofort open source: http://github.com/defnull/multipart

95% Test Coverage und 100% Python3 kompatibel :)
Bottle: Micro Web Framework + Development Blog
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Vllt. hilft es dir, wenn ich nur 4 von deinen 6 Punkten kenne... ;-)
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Meh, ich hab mir das fast schon gedacht. Naja, muss ich halt auf die bug reports warten sobald das ganze in Bottle eingebaut ist ;)
Bottle: Micro Web Framework + Development Blog
Antworten