C and Pure parser accept invalid UTF-8 strings, the Java parser doesn't.
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Reproduziere zuerst das Ruby-Beispiel, lies dann java/src/json/ext/ByteListTranscoder.java und vergleiche das Verhalten der C-, Pure- und Java-Parser bei ungültigem UTF-8. Kläre, welches Verhalten mit MRI übereinstimmen sollte, bevor du den Parser änderst; als erledigt gilt die Aufgabe, wenn die Implementierungen für diese Eingabe ein abgestimmtes, konsistentes Ergebnis liefern.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
I know, I know...if it's bad content it's bad content. But this represents a difference from MRI.
Here's the case, again a reduced version of one I got from @rkh:
# encoding: utf-8
require 'json'
x = "{\"foo\":\"\xC3\"}"
h = JSON.parse(x)
p h['foo']
p h['foo'].encoding
So basically there's a bad byte in a UTF-8 string, and the MRI version walks right by it and allows it to come through to the resulting parsed json structure.
I have a totally broken patch for this:
diff --git a/java/src/json/ext/ByteListTranscoder.java b/java/src/json/ext/ByteListTranscoder.java
index ed9e54b..a7e42ba 100644
--- a/java/src/json/ext/ByteListTranscoder.java
+++ b/java/src/json/ext/ByteListTranscoder.java
@@ -78,9 +78,10 @@ abstract class ByteListTranscoder {
return head;
}
if (head <= 0xbf) { // 0b10xxxxxx
- throw invalidUtf8(); // tail byte with no head
+ return head; //throw invalidUtf8(); // tail byte with no head
}
if (head <= 0xdf) { // 0b110xxxxx
+ if (pos + 1 > srcEnd) return head;
ensureMin(1);
int cp = ((head & 0x1f) << 6)
| nextPart();
Again, I'm not sure this is actually something that needs to be fixed, but because the MRI version of json does not blow up on this content, there's something to be addressed.
- Vorherrschende Sprache
- Ruby
- Sterne
- 784
- Forks
- 385
- Ø Merge
- 5 Std. 37 Min.
- Gemergte PRs (30 T.)
- 24
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus ruby/json
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
ruby/json#1064 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
ruby/json#1041 · 7 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Output formatting differences between jRuby 10.0.0.1 and Ruby 3.4 when converting Float to JSON.Evtl. wieder frei @headius hat das vor 412 Tagen übernommen, und es ist kein Pull Request offen. Offenjruby
ruby/json#817 · 3 Kommentare · 1 Reaktion · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
Don't cache JRuby runtime in static fieldsEvtl. wieder frei @headius hat das vor 689 Tagen übernommen, und es ist kein Pull Request offen. Offenjruby
ruby/json#707 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
new feature
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
ruby/json#252 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
ds-drift
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 76/100
we-promise/sure#4120 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 4 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
scanaislop/aislop#476 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
avo-hq/avo#4878 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag