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

File memcache-fix-stack-overflow.patch, 2.5 KB (added by binbino, 4 years 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):