Dem Programm zum Erkennen des Upload-Bugs wurde jetzt noch eine Logfunktion spendiert. In dem Logfile werden Zeit, Ip und Port gespeichert.
Ja, das ist auch mit drin. Wäre gut, wenn du das mit dem Senden eines Unicode-Zeichens kurz noch testen könntest. Vertraue meinem eigenen Test nicht ganz
Komisch: Ich hab grad mal einen Spieler getoetet, aber die Nation taucht noch bei der Leaderauswahl auf. Ist das normal?
Achtung Spoiler:
Ja, der Spieler kann sich dann noch genau einmal einloggen, wo er die "Du wurdest besiegt"-Meldung erhält. Danach verschwindet der Eintrag in der Liste.
Also es crasht bei unicode nicht mehr, hat aber auch keine Antwort gebracht. Ich habe mal ein try/catch eingebaut:
Warum hast du das auskommentiert:?
Code:# It was a bad idea to write output in the error case... Just pass now. #self.wfile.write( simplejson.dumps( {'return':'fail','info': "Exception: " + str(e) } ) + "\n" )Das gibt noch ne sinnvolle Antwort und encoded auch mal die &<>. Ich kanns auch gleich pushen wenn das ok ist.Code:diff --git a/PBs/Python/v1/Webserver.py b/PBs/Python/v1/Webserver.py index 8c9ee6b..c89d96d 100644 --- a/PBs/Python/v1/Webserver.py +++ b/PBs/Python/v1/Webserver.py @@ -129,9 +129,15 @@ class HTTPRequestHandler(BaseHTTPRequestHandler): action = inputdata.get("action") if( action == "chat" and inputdata.get("password") == pbSettings["webserver"]["password"] ): - msg = str(inputdata.get("msg","Default message. Missing msg argument?!")) - PB.sendChat( msg ) - self.wfile.write( simplejson.dumps( {'return':'ok','info':'Send: '+msg } ) +"\n" ) + try:^M + msg = str(inputdata.get("msg","Default message. Missing msg argument?!"))^M + msg = msg.replace('&', '&')^M + msg = msg.replace('<', '<')^M + msg = msg.replace('>', '>')^M + PB.sendChat( msg )^M + self.wfile.write( simplejson.dumps( {'return':'ok','info':'Send: '+msg } ) +"\n" ) ^M + except:^M + self.wfile.write( simplejson.dumps( {'return':'fail','info':'Some error occured trying to send the message. Probably a character that cannot be encoded.' } ) +"\n" )^M elif( action == "setAutostart" and inputdata.get("password") == pbSettings["webserver"]["password"] ): self.server.lock.acquire()
Achtung Spoiler:
Gut. Habe nichts dagegen, wenn du das gleich pushst
[quote]
Warum hast du das auskommentiert:?
Das ist genau dann ein Problem, wenn im Try-Abschnitt beim Schreiben in wfile ein Fehler aufgetreten ist. Genau das ist nat. bei mir mal passiertCode:# It was a bad idea to write output in the error case... Just pass now. #self.wfile.write( simplejson.dumps( {'return':'fail','info': "Exception: " + str(e) } ) + "\n" )
Du kannst die Zeile wieder einkommentieren, aber müsstest das dann nochmal in ein zweites Try-Catch kapseln.
Edit: Oder man unterscheidet feiner nach dem Typ der Exceptions.
Geändert von Ramkhamhaeng (14. September 2014 um 14:19 Uhr)
Laut traffic bericht hatte ich mit dem erweiterten uploadbug-fix noch keine traffic-ausreisser (also alles < 100 MB/Tag). Der upload-fix war aber sehr fleissig und hat 20 Verbindungen abgeschossen. Teilweise eine IP mehrmals. Ich hab aber noch nicht die aktuelle Version mit log und so, d.h. weiss ich nicht in welchem Abstand.
Achtung Spoiler:
Kurze Statusmeldung: An dem Umleiten der Logging-Nachrichten bin ich am letzten WE irgendwie verzweifelt und konnte das nicht beenden. Wahrscheinlich geht es nicht so einfach (Umleiten von strerr) wie ich mir das gedacht hatte.
Zulan hat die Vermutung geäußert, dass der Upload-Bug nicht ausgelöst wird, wenn man das Programm mit Alt+F4 schließt und meine Tests bestätigten das auch. Dem hat Caledorn in einem Thread bei den Fanatics jedoch widersprochen. Ganz so einfach ist es wohl nicht
Zitat von Caledorn
Die Files sind irrtümlich von mir ins Repo aufgenommen worden. Nach deinem Hinweis habe ich sie in meiner lokalen Kopie jetzt entfernt.