fixes response overwrite bug
This fixes a bug in truncated response payload handling. Payloads requiring more than one call to `Read()` were overwiting the previous Read()'s buffer contents. Because we know the response payload size, we can simply call `io.ReadAll()` rather than looping over calls to `Read()`.
This commit is contained in:
		
							
								
								
									
										12
									
								
								rpc.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								rpc.go
									
									
									
									
									
								
							| @@ -195,14 +195,10 @@ func (l *Libvirt) listen() { | |||||||
| 		// payload: packet length minus what was previously read | 		// payload: packet length minus what was previously read | ||||||
| 		size := int(length) - (constants.PacketLengthSize + constants.HeaderSize) | 		size := int(length) - (constants.PacketLengthSize + constants.HeaderSize) | ||||||
| 		buf := make([]byte, size) | 		buf := make([]byte, size) | ||||||
| 		for n := 0; n < size; { | 		_, err = io.ReadFull(l.r, buf) | ||||||
| 			nn, err := l.r.Read(buf) | 		if err != nil { | ||||||
| 			if err != nil { | 			// invalid packet | ||||||
| 				// invalid packet | 			continue | ||||||
| 				continue |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			n += nn |  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// route response to caller | 		// route response to caller | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user