@@ -465,9 +465,20 @@ def _wait_for_content_frames(self, method_frame):
465465 return self ._on_interrupt_set ()
466466
467467 error = False
468- body_value = bytes () if PYTHON3 else str ()
469- while len (body_value ) < header_value .body_size :
468+
469+ # To retrieve the message body we must concatenate the binary content
470+ # of several frames. The recommended idiom for this differs
471+ # in py3 and py2.
472+ if PYTHON3 :
473+ body_value = bytearray ()
474+ else :
475+ body_chunks = []
476+ body_length_received = 0
477+ body_total_size = header_value .body_size
478+
479+ while body_length_received < body_total_size :
470480 body_part = self ._wait_on_frame (CONTENT_BODY )
481+
471482 self ._check_for_rpc_request (body_part )
472483 if self ._interrupt_is_set :
473484 self ._on_interrupt_set ()
@@ -479,12 +490,16 @@ def _wait_for_content_frames(self, method_frame):
479490 elif consuming and not self ._consumers :
480491 self ._reject_inbound_message (method_frame )
481492 error = True
482-
483493 if error :
484494 return
485495
486- body_value += body_part .value
487- if len (body_value ) == header_value .body_size :
488- break
496+ body_length_received += len (body_part .value )
497+ if PYTHON3 :
498+ body_value += body_part .value
499+ else :
500+ body_chunks .append (body_part .value )
501+
502+ if not PYTHON3 :
503+ body_value = '' .join (body_chunks )
489504
490505 return self ._create_message (method_frame , header_value , body_value )
0 commit comments