--- orig_asynchat.py 2010-09-18 03:06:50.000000000 +0600 +++ asynchat.py 2011-03-03 23:35:52.381971463 +0500 @@ -112,6 +112,8 @@ "Set the input delimiter. Can be a fixed string of any length, an integer, or None" if isinstance(term, str) and self.use_encoding: term = bytes(term, self.encoding) + if (isinstance(term, int) or isinstance(term, long)) and term < 0: + raise ValueError('Negative terminator value is not allowed') self.terminator = term def get_terminator (self): @@ -141,7 +143,7 @@ while self.ac_in_buffer: lb = len(self.ac_in_buffer) - terminator = self.get_terminator() + terminator = self.terminator if not terminator: # no terminator, collect it all self.collect_incoming_data (self.ac_in_buffer) @@ -152,7 +154,7 @@ if lb < n: self.collect_incoming_data (self.ac_in_buffer) self.ac_in_buffer = b'' - self.terminator = self.terminator - lb + self.terminator -= lb else: self.collect_incoming_data (self.ac_in_buffer[:n]) self.ac_in_buffer = self.ac_in_buffer[n:]