classification
Title: Missing cast to Py_ssize_t in socket_connection.c
Type: behavior Stage:
Components: Library (Lib) Versions: Python 2.7
process
Status: closed Resolution: out of date
Dependencies: Superseder: multiprocessing: conn_recv_string() broken error handling
View: 10133
Assigned To: Nosy List: MOtter, amaury.forgeotdarc
Priority: normal Keywords:

Created on 2012-06-11 14:46 by MOtter, last changed 2012-06-11 17:57 by amaury.forgeotdarc. This issue is now closed.

Messages (2)
msg162620 - (view) Author: Marco den Otter (MOtter) Date: 2012-06-11 14:46
In the file socket_connection.c on line 139 a cast to Py_ssize_t is missing for the return value.

Is:
  return res < 0 ? res : ulength;
Should be
  return res < 0 ? (Py_ssize_t)res : (Py_ssize_t)ulength;

Now it can be possible that a close of the socket is not detected.

Found the bug by creating a server client that only sends the length of a data package and then closing the socket. 

Without the cast the calling function (connection_recvbytes in connection.h) will try to return an object because of not detecting the result was smaller then 0.
msg162632 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2012-06-11 17:57
This was fixed 3 hours ago, with issue10133 :)
History
Date User Action Args
2012-06-11 17:57:29amaury.forgeotdarcsetstatus: open -> closed

nosy: + amaury.forgeotdarc
messages: + msg162632

superseder: multiprocessing: conn_recv_string() broken error handling
resolution: out of date
2012-06-11 14:46:10MOttercreate