Rückgabe von Longpoll maskiert Steuerzeichen nicht vollständig

Begonnen von Dr. Boris Neubert, 04 September 2016, 20:34:22

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

in JSON sind nichtdruckbare Steuerzeichen nicht zulässig. Sofern solche Sonderzeichen vorkommen, führt das bei Longpoll zu einer Fehlermeldung beim Client (in Firefox z.B. parsererror, SyntaxError: JSON.parse: bad control character in string literal at line 4018 column 28 of the JSON data). Steuerzeichen lassen sich nicht immer vermeiden. So ist beispielsweise das Attribut requestSeparator bei ECMD ggf. ein Steuerzeichen (\0).

M.E. müsste die Maskierung in FHEMWEB vervollständigt werden. Gehe ich recht in der Annahme, dass das ab Zeile 2516 geschehen müsste? Hier der aktuelle noch nicht geänderte Code:

my %jsTab = ( 92=>'\\\\', 34=>'\\"', 9=>'\\t', 13=>'\\r', 10=>'\\n' );
sub
FW_longpollInfo($@)
{
  my $fmt = shift;
  if($fmt && $fmt eq "JSON") {
    my @a;
    map { my $x=$_; $x=~s/([\\"\t\r\n])/$jsTab{ord($1)}/ge; push @a,$x; } @_;
    return '["'.join('","', @a).'"]';
  } else {
    return join('<<', @_);
  }
}


Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Da wirst Du wohl Recht haben, es dauert aber noch zwei Wochen, bis ich das anpassen kann. Kommt auf die Todo Liste

Dr. Boris Neubert

Es ist auch noch in JsonList und JsonList2 (letzteres wird von TabletUI verwendet).

Anbei eine rustikale Lösung als Patches.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Habe die Patches unveraendert angewandt und eingecheckt. Ich meine deine Aenderungen sind OK und die Module kann man weiterhin laden, aber einen Test mit kaputten Daten habe ich nicht durchgefuehrt.

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

karl0123

#5
Seit dieser Änderung werden bei mir gewisse Zeichen nicht mehr korrekt kodiert zurück gegeben, wenn sie per Longpoll aktualisiert werden. Hier ein Beispiel mit dem Zeichen °. Das Bild enthält teilweise Werte, die per Longpoll aktualisiert wurden. Alle Zeilen, in denen das° korrekt dargestellt wird, wurde noch nicht per Longpoll aktualisiert.

Dr. Boris Neubert

Hallo,

das kann ich bei mir nicht nachstellen. Es sieht für mich wie ein Kodierungsproblem aus (Latin1 vs. UTF-8). Seit der Anpassung werden Zeichen, die in JSON nicht erlaubt sind, als \uxxxx unikodiert gesendet. Was zeigt Dir Dein Browser denn als Kodierung der von FHEM ausgelieferten Seite an? Bei mir ist es UTF-8.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

karl0123

Hm. Warum sollte es die Textkodierung im Browser sein, wenn es nur die per Longpoll ausgelieferten Inhalte betrifft und genau mit der Version mit diesem Patch vorhanden ist und mit der vorherigen Version nicht (nach restore)? Das erschließt sich mir nicht. Die Textkodierung im Firefox, Chrome, Internet Explorer und allen anderen Browsern und auf allen Devices, die ich verwende, ist UTF-8.

Und ja, ich weiß sehr genau, was ich tue. ;)

CoolTux

Hallo Boris

Bei mir hat sich gerade ein User gemeldet dem nun einige Anzeigen in TabletUI Fehlerhaft, also mit falschen Zeichen bei Umlauten angezeigt werden. Wäre das auch eine Möglichkeit auch denn es hier FHEMWEB betrifft?


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Posti123

In der FHEM App auf dem iPhone gehen Räume mit Umlauten nicht mehr und werden Fehlerhaft dargestellt
18xHM-CC-RT-DN, 5xHM-TC-IT-WM-W-EU, HMLAN, 2xJeeLink 868, 1xJeeLink433, 1xCUL868, HM-LC-Bl1PBU-FM, HM-LC-Sw2-FM, HM-LC-SW1-FM, HM-LC-Sw1PBU-FM, 5xHM-Sec-SC-2, 2xHM-Sec-SCo, HM-ES-TX-WM, HM-Sen-MDIR-O-2, HM-WDS10-TH-O, 6xTechnoline, 2x PCA301,2xHM-PB-2-WM55-2,2xHM-RC-4-2,2xHM-WDS30-T-O, HM-SEC-WDS-2

Dr. Boris Neubert

Hallo Rudi,

ich schlage vor, alle 3 Patches zurückzudrehen, und herauszufinden,warum die Maskierung nicht funktioniert  (aber bei mir). Dann mit einer anderen Lösung in einer zentralen sub JSONEncode () neu starten.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Depechem

Zitat von: CoolTux am 04 Oktober 2016, 22:36:30
Hallo Boris

Bei mir hat sich gerade ein User gemeldet dem nun einige Anzeigen in TabletUI Fehlerhaft, also mit falschen Zeichen bei Umlauten angezeigt werden. Wäre das auch eine Möglichkeit auch denn es hier FHEMWEB betrifft?


Grüße

Ja genau dieses Problem habe ich.
Ich habe jetzt FHEM/01_FHEMWEB.pm
FHEM/98_JsonList.pm
FHEM/98_JsonList2.pm

aus meiner Sicherung vom 19.09. genommen seitdem läuft wieder alles richtig.

Werden die .pm`s wieder aktulisiert das bei einem Update wieder alles richtig läuft?

Viele Grüße Thomas
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

rudolfkoenig

Zitatich schlage vor, alle 3 Patches zurückzudrehen, und herauszufinden
Habs gemacht, steht ab sofort per update zur Verfuegung.

An die mit Problemmeldungen: koennt ihr bitte eine _einfache_ Konfiguration posten (oder diff zu fhem.cfg.demo), mit dem wir das Problem reproduzieren koennen?

@Boris: kannst du bite das Gleiche fuer dein Problemfall machen?

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Die Lösung ist nur halb-toll, es kommt dabei die Meldung:
ZitatGlobal symbol "$vjs" requires explicit package name at (eval 15) line 1.

Wenn ich in telnet folgendes Eingebe:
Zitatfhem> encoding latin1
encoding changed to latin1
fhem> trigger web JS:window.alert('Ä\nÖ\t\\Ü')
dann sehe ich in der Tat in einem parallel geoeffneten Browser Fenster das Problem, und das ist mAn so zu erklaeren:
- FHEM speichert intern alles in UTF-8
- bei UTF-8 darf man BYTES, die groesser als 0x7E sind, nicht mit \uXXXX ersetzen (wenn ich https://de.wikipedia.org/wiki/UTF-8 richtig verstehe, und der Autor da kein Mist erzaehlt), nur alles zwischen 0 und 19 plus \ und "

Ich habe das jetzt implementiert und eingecheckt, brauche aber weiterhin den Problemfall von Boris.