Consistenty - `IOError` vs `EBADF`?
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- ruby
- Domaine
- networking, security
Piste de recherche
Commencez par exécuter la reproduction Ruby fournie avec Socket.pair et OpenSSL::SSL::SSLSocket, en comparant le comportement avec celui d’un IO ordinaire après close. Étudiez les deux paramètres sync_close et définissez done comme le fait que close-then-read produise un comportement d’erreur cohérent sans blocage.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
SSLSocket error conditions are not consistent with IO.
io.closefollowed byio.readcan result inEBADFrather thanIOError.- Without
sync_close,io.closefollowed byio.readwill hang. Even if the underlying IO is not closed, I don't think theSSLSocketinstance should continue to work after being closed?
Reproduction:
#!/usr/bin/env ruby
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'localhost'
end
require 'socket'
require 'openssl'
require 'localhost'
def read_after_close(io)
io.close
io.read
end
begin
client, server = Socket.pair(:UNIX, :STREAM)
read_after_close(client)
rescue => error
$stderr.puts error.full_message
end
begin
authority = Localhost::Authority.fetch
client, server = Socket.pair(:UNIX, :STREAM)
ssl_server = OpenSSL::SSL::SSLSocket.new(server, authority.server_context)
ssl_server.sync_close = true
ssl_client = OpenSSL::SSL::SSLSocket.new(client, authority.client_context)
ssl_client.sync_close = true # If this is not set, `io.read` above will hang which is also a bit odd.
Thread.new{ssl_server.accept}
ssl_client.connect
read_after_close(ssl_client)
rescue => error
$stderr.puts error.full_message
end
Is this something we can improve?
- Langage dominant
- C
- Étoiles
- 276
- Forks
- 200
- Merge moyen
- 15 h 35 min
- PR mergées (30 j)
- 7
Préparer son environnement
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/openssl
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
ruby/openssl#1082 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
ruby/openssl#1075 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Unchecked *_set_* callsOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
ruby/openssl#1038 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Add a method OpenSSL::PKey#sizeOuverte
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
ruby/openssl#988 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de ruby/openssl
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
python-pillow/Pillow#10087 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
OpenPrinting/cups#1729 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
awslabs/amazon-kinesis-video-streams-webrtc-sdk-c#2406 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
DaveGamble/cJSON#1094 ·
-
status:needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
PX4/PX4-Autopilot#28923 ·
Les mainteneurs répondent en général sous 1 jour