Ticket #5898: memcache-fix-stack-overflow.patch

File memcache-fix-stack-overflow.patch, 2.5 KB (added by binbino, 20 months ago)
  • twisted/protocols/basic.py

     
    547547        rawDataReceived, depending on mode.) 
    548548        """ 
    549549        self.__buffer = self.__buffer+data 
    550         while self.line_mode and not self.paused: 
    551             try: 
    552                 line, self.__buffer = self.__buffer.split(self.delimiter, 1) 
    553             except ValueError: 
    554                 if len(self.__buffer) > self.MAX_LENGTH: 
    555                     line, self.__buffer = self.__buffer, '' 
    556                     return self.lineLengthExceeded(line) 
    557                 break 
     550        while not self.paused and self.__buffer: 
     551            if self.line_mode: 
     552                try: 
     553                    line, self.__buffer = self.__buffer.split(self.delimiter, 1) 
     554                except ValueError: 
     555                    if len(self.__buffer) > self.MAX_LENGTH: 
     556                        line, self.__buffer = self.__buffer, '' 
     557                        return self.lineLengthExceeded(line) 
     558                    break 
     559                else: 
     560                    linelength = len(line) 
     561                    if linelength > self.MAX_LENGTH: 
     562                        exceeded = line + self.__buffer 
     563                        self.__buffer = '' 
     564                        return self.lineLengthExceeded(exceeded) 
     565                    why = self.lineReceived(line) 
     566                    if why or self.transport and self.transport.disconnecting: 
     567                        return why 
    558568            else: 
    559                 linelength = len(line) 
    560                 if linelength > self.MAX_LENGTH: 
    561                     exceeded = line + self.__buffer 
    562                     self.__buffer = '' 
    563                     return self.lineLengthExceeded(exceeded) 
    564                 why = self.lineReceived(line) 
    565                 if why or self.transport and self.transport.disconnecting: 
     569                data, self.__buffer = self.__buffer, '' 
     570                why = self.rawDataReceived(data) 
     571                if why: 
    566572                    return why 
    567         else: 
    568             if not self.paused: 
    569                 data=self.__buffer 
    570                 self.__buffer='' 
    571                 if data: 
    572                     return self.rawDataReceived(data) 
    573573 
    574574 
    575575    def setLineMode(self, extra=''): 
     
    586586        """ 
    587587        self.line_mode = 1 
    588588        if extra: 
    589             return self.dataReceived(extra) 
     589            self.__buffer += extra 
    590590 
    591591 
    592592    def setRawMode(self):