C and Pure parser accept invalid UTF-8 strings, the Java parser doesn't.
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Reproduza primeiro o exemplo de Ruby, depois leia java/src/json/ext/ByteListTranscoder.java e compare o comportamento dos parsers C, Pure e Java para UTF-8 inválido. Esclareça qual comportamento deve corresponder ao MRI antes de alterar o parser; considera-se concluído quando as implementações tiverem um resultado acordado e consistente para esta entrada.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Ruby
- Estrelas
- 784
- Forks
- 385
- Merge médio
- 7h 22min
- PRs com merge (30d)
- 20
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de ruby/json
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
ruby/json#1064 · 5 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
ruby/json#1041 · 7 comentários ·
Mantenedores costumam responder em até 1 dia
-
Output formatting differences between jRuby 10.0.0.1 and Ruby 3.4 when converting Float to JSON.Talvez livre de novo @headius assumiu há 410 dias e não há nenhum pull request aberto. Abertajruby
ruby/json#817 · 3 comentários · 1 reação · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Don't cache JRuby runtime in static fieldsTalvez livre de novo @headius assumiu há 687 dias e não há nenhum pull request aberto. Abertajruby
ruby/json#707 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
new feature
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
ruby/json#252 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Homebrew/homebrew-cask#293134 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
notch8/iiif_print#430 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
Mantenedores costumam responder em até 1 dia
-
ActionText::Content#to_markdown: <br> in a table cell and empty <tr> produce malformed Markdown tablesTalvez já em andamento @azmi2409 assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
Mantenedores costumam responder em até 2 dias