URLEncoding à la RIM

Folgender Bug hat mich in der letzten Woche etwas Zeit gekostet: In einer BlackBerry-Applikation sollen Daten verschlüsselt über einen URL-Parameter verschickt werden. Die eigentliche Verschlüsselung erfolgt dabei mit RIM-Klassen. Das aus dem Verschlüsselungsprozess resultierende Byte-Array wird durch die URLEncodedPostData-Klasse encodiert.

Wie sich herausstellte, zeigt URLEncodedPostData ein ungewöhnliches (allerdings dokumentiertes) Verhalten bei Zeilenumbrüchen. Ein linefeed (\n) wird nicht zu %0A encodiert, sondern zu %0D%0A (entspricht \r\n). Somit verhält sich die RIM-Klasse anders als der java.net.URLEncoder der Java-SE.

Als Resultat konnten Byte-Arrays, die zufälligerweise ein linefeed enthielten, nicht mehr vom Server entschlüsselt werden. Da sich dieses Verhalten nicht beeinflussen lässt, musste eine alternative URLEncoder-Klasse in das Projekt integriert werden.

Leave a Reply