Admin RPC-Interface defekt - Fehlerhaftes JSON escaping

Antworten
SBusse
Beiträge: 2
Registriert: 29 Dez 2024, 20:37

Admin RPC-Interface defekt - Fehlerhaftes JSON escaping

Beitrag von SBusse »

Moin zusammen,

ich verwende aktuell ein frisch installiertes OPSI 4.3.26.23 (letzte stabile Version) unter Ubuntu 24.04.

Fehlerbild
Beim Aufruf des RPC-Interfaces unter https://OPSI:4447/admin/#rpc-interface bleibt die Seite (außer der Menüleiste) leer. Ein Blick in die Chrome Dev-Tools zeigt folgende Fehlermeldung:

Code: Alles auswählen

admin/#rpc-interface:1 Uncaught SyntaxError: Expected ',' or '}' after property value in JSON at position 39041 (line 1 column 39042)
    at JSON.parse (<anonymous>)
    at admin/:23:31
    
Uncaught TypeError: Cannot read properties of undefined (reading 'forEach')
    at fillRPCMethodSelect (admininterface.js:517:19)
    at openTab (admin/:98:5)
    at onLoad (admin/:59:4)
    at onload (VM334 :1:1) 
Analyse
Öffnet man die Seite mit "Quelltext anzeigen" im Browser, so scheint die 250 KB RPC-Interfaces JSON direkt in den Quellcode der Seite geschrieben zu werden (https://github.com/opsi-org/opsiconfd/b ... e.html#L23), dessen Parsing im Browser fehlschlägt.

Nach weiterer Eingrenzung scheint die Fehlermeldung unter anderem durch den String "\u0022*\u0022" zu entstehen. Eventuell führen andere in Unicode codierten Zeichen zu ähnlichen Problemen, was ich aber nicht geprüft habe. Der Browser interpretiert zunächst den String und dekodiert die Unicode encodierten Zeichen, bevor der String an JSON.parse weitergeben wird. Im Folgenden ein Beispiel:

Code: Alles auswählen

{"doc": "\u0022*\u0022"} -> {"doc": ""*""} -> JSON.parse('{"doc": ""*""}') -> invalides JSON
Der Fehler lässt sich mit folgendem minimalen JavaScript reproduzieren

Code: Alles auswählen

<script>
let data = '{"doc": "\u0022*\u0022"}';
JSON.parse(data);
</script>
Escaped man die Unicode-Characters korrekt mit einem \\ wird das JSON korrekt gerparsed.

Code: Alles auswählen

<script>
let data = '{"doc": "\\u0022*\\u0022"}';
JSON.parse(data);
</script>
Rückfragen
Hat es einen Grund, warum die RPC-Interface JSON überhaupt direkt in den Quelltext geschrieben wird? Wäre es nicht eleganter und weniger fehleranfällig, den JSON Code nachzuladen? Lädt man das JSON so wie es aktuell ist aus einer Datei funktioniert alles einwandfrei.
Benutzeravatar
j.schneider
uib-Team
Beiträge: 1960
Registriert: 29 Mai 2008, 15:14

Re: Admin RPC-Interface defekt - Fehlerhaftes JSON escaping

Beitrag von j.schneider »

Hallo,

das Problem ist opsiconfd 4.3.27.1 bereits behoben:
https://software.opensuse.org//download ... =opsiconfd

Grüße
Jan Schneider
Antworten