Generation of multipart post fail if inconsistent encodings given as input
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 45/100
Piste de recherche
Commencez dans lib/net/http/generic_request.rb, au niveau de encode_multipart_form_data, et reproduisez l’exemple fourni de StringIO mélangeant UTF-8 et ASCII-8BIT. Suivez l’assemblage multipart qui déclenche Encoding::CompatibilityError, puis vérifiez qu’une requête multipart contenant des entrées encodées différemment peut être générée et envoyée sans cette erreur.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Ruby
- Étoiles
- 148
- Forks
- 96
- Merge moyen
- 6 j 5 h
- PR mergées (30 j)
- 3
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ruby/net-http
-
Empty DOM attribute crashes tokenizerPeut-être pris @jeremyevans l’a pris il y a 92 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
Unquote and unescape Content-Type: charset [RFC7230]Peut-être pris @jeremyevans l’a pris il y a 92 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 38/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
Toutes les issues de ruby/net-http
Issues similaires
-
documentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 86/100
bridgetownrb/bridgetown#1130 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
stripe/stripe-ruby#1994 ·
Les mainteneurs répondent en général sous 1 jour
-
[Fehler]: /abdeckstift wirft 500 — part_type aus der Phonemreduction-Umbenennung nicht mitgezogenOuvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
wort-schule/wort.schule#787 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
lugassawan/swe-workbench#799 ·
Les mainteneurs répondent en général sous 1 jour
-
2.8.6: NoMethodError "undefined method 'first'" in profdata_coverage_dir whenever --scheme is usedOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
SlatherOrg/slather#586 · 2 commentaires ·