mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05:00 
			
		
		
		
	proxy: Fixed #1352: invalid use of the HTTP hijacker
This commit is contained in:
		
							parent
							
								
									8464020f7c
								
							
						
					
					
						commit
						ae10122f7e
					
				@ -238,7 +238,7 @@ func (rp *ReverseProxy) ServeHTTP(rw http.ResponseWriter, outreq *http.Request,
 | 
				
			|||||||
			panic(httpserver.NonHijackerError{Underlying: rw})
 | 
								panic(httpserver.NonHijackerError{Underlying: rw})
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		conn, _, err := hj.Hijack()
 | 
							conn, brw, err := hj.Hijack()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -260,8 +260,23 @@ func (rp *ReverseProxy) ServeHTTP(rw http.ResponseWriter, outreq *http.Request,
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		defer backendConn.Close()
 | 
							defer backendConn.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		go pooledIoCopy(backendConn, conn) // write tcp stream to backend
 | 
							// Proxy backend -> frontend.
 | 
				
			||||||
		pooledIoCopy(conn, backendConn)    // read tcp stream from backend
 | 
							go pooledIoCopy(conn, backendConn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Proxy frontend -> backend.
 | 
				
			||||||
 | 
							//
 | 
				
			||||||
 | 
							// NOTE: Hijack() sometimes returns buffered up bytes in brw which
 | 
				
			||||||
 | 
							// would be lost if we didn't read them out manually below.
 | 
				
			||||||
 | 
							if brw != nil {
 | 
				
			||||||
 | 
								if n := brw.Reader.Buffered(); n > 0 {
 | 
				
			||||||
 | 
									rbuf, err := brw.Reader.Peek(n)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									backendConn.Write(rbuf)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							pooledIoCopy(backendConn, conn)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		copyHeader(rw.Header(), res.Header)
 | 
							copyHeader(rw.Header(), res.Header)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user