Generation of multipart post fail if inconsistent encodings given as input

Abierto
#187 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
ruby
Área
api, backend

Línea de trabajo

Comience en lib/net/http/generic_request.rb, en encode_multipart_form_data, y reproduzca el ejemplo proporcionado de StringIO con UTF-8 y ASCII-8BIT mezclados. Siga el ensamblado multipart que provoca Encoding::CompatibilityError y, a continuación, verifique que se pueda generar y enviar una solicitud multipart que contenga entradas codificadas de forma diferente sin que se produzca ese error.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

When attaching multipart entities of different encodings it is easy to get failures due to intermediary strings inside encode_multipart_form_data that care about encoding despite there being no need to care about them.

Example:

require "net/http"
require "stringio"

utf_string = "räksmörgås"
ascii_string = "räkmacka"
ascii_string.force_encoding("ASCII-8BIT")

form_data = {
  "foo"   => "bar",
  "utf8"  => StringIO.new(utf_string),
  "ascii" => StringIO.new(ascii_string)
}

url = URI("http://www.example.com")

request = Net::HTTP::Post.new(url)
request.set_form(form_data, "multipart/form-data")

Net::HTTP.start(url.hostname, url.port) do |http|
  http.request(request)
end

This results in

net-http-0.4.1/lib/net/http/generic_request.rb:354:in `block in encode_multipart_form_data': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
	from /home/linus/.gem/ruby/3.3.3/gems/net-http-0.4.1/lib/net/http/generic_request.rb:320:in `each'
	from /home/linus/.gem/ruby/3.3.3/gems/net-http-0.4.1/lib/net/http/generic_request.rb:320:in `encode_multipart_form_data'
	from /home/linus/.gem/ruby/3.3.3/gems/net-http-0.4.1/lib/net/http/generic_request.rb:303:in `send_request_with_body_data'
	from /home/linus/.gem/ruby/3.3.3/gems/net-http-0.4.1/lib/net/http/generic_request.rb:204:in `exec'
[...]

There are real use cases that are reasonable like posting both a text file and a pdf at the same time.

A workaround is to always encode absolutely everything as ascii-8bit before posting it.

Lenguaje dominante
Ruby
Estrellas
148
Forks
95
Merge medio
10 h 54 min
PR fusionados (30 d)
4

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de ruby/net-http

Todos los issues de ruby/net-http

Issues similares

Más issues de Ruby

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.