mirror of
				https://github.com/jlu5/PyLink.git
				synced 2025-11-04 00:47:21 +01:00 
			
		
		
		
	Irc: prevent rare UnicodeDecodeError by decoding individual lines, not the entire socket.recv() output
Such an error is rare, but it did occur twice since I've started developing this :)
This commit is contained in:
		
							parent
							
								
									fe9c317f2c
								
							
						
					
					
						commit
						06d17d578b
					
				
							
								
								
									
										11
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								main.py
									
									
									
									
									
								
							@ -112,18 +112,19 @@ class Irc():
 | 
			
		||||
        self.initVars()
 | 
			
		||||
 | 
			
		||||
    def run(self):
 | 
			
		||||
        buf = ""
 | 
			
		||||
        data = ""
 | 
			
		||||
        buf = b""
 | 
			
		||||
        data = b""
 | 
			
		||||
        while (time.time() - self.lastping) < self.pingtimeout:
 | 
			
		||||
            log.debug('(%s) time_since_last_ping: %s', self.name, (time.time() - self.lastping))
 | 
			
		||||
            log.debug('(%s) self.pingtimeout: %s', self.name, self.pingtimeout)
 | 
			
		||||
            data = self.socket.recv(2048).decode("utf-8")
 | 
			
		||||
            data = self.socket.recv(2048)
 | 
			
		||||
            buf += data
 | 
			
		||||
            if self.connected and not data:
 | 
			
		||||
                log.warn('(%s) No data received and self.connected is not set; disconnecting!', self.name)
 | 
			
		||||
                break
 | 
			
		||||
            while '\n' in buf:
 | 
			
		||||
                line, buf = buf.split('\n', 1)
 | 
			
		||||
            while b'\n' in buf:
 | 
			
		||||
                line, buf = buf.split(b'\n', 1)
 | 
			
		||||
                line = line.decode("utf-8")
 | 
			
		||||
                log.debug("(%s) <- %s", self.name, line)
 | 
			
		||||
                hook_args = self.proto.handle_events(self, line)
 | 
			
		||||
                # Only call our hooks if there's data to process. Handlers that support
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user