httpd: fix offset for sendfile
If the Range: header is not present it the request, the offset passed to sendfile is wrong, and httpd falls back to the read-write loop. function old new delta send_file_and_exit 857 865 +8 handle_incoming_and_exit 2239 2230 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 8/-9) Total: -1 bytes Signed-off-by: Maxim Storchak <m.storchak@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							29a9043b36
						
					
				
				
					commit
					04e0d8e579
				
			@@ -1871,7 +1871,7 @@ static NOINLINE void send_file_and_exit(const char *url, int what)
 | 
			
		||||
		send_headers(HTTP_OK);
 | 
			
		||||
#if ENABLE_FEATURE_USE_SENDFILE
 | 
			
		||||
	{
 | 
			
		||||
		off_t offset = range_start;
 | 
			
		||||
		off_t offset = (range_start < 0) ? 0 : range_start;
 | 
			
		||||
		while (1) {
 | 
			
		||||
			/* sz is rounded down to 64k */
 | 
			
		||||
			ssize_t sz = MAXINT(ssize_t) - 0xffff;
 | 
			
		||||
@@ -2486,8 +2486,8 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
 | 
			
		||||
		if (STRNCASECMP(iobuf, "Range:") == 0) {
 | 
			
		||||
			/* We know only bytes=NNN-[MMM] */
 | 
			
		||||
			char *s = skip_whitespace(iobuf + sizeof("Range:")-1);
 | 
			
		||||
			if (is_prefixed_with(s, "bytes=")) {
 | 
			
		||||
				s += sizeof("bytes=")-1;
 | 
			
		||||
			s = is_prefixed_with(s, "bytes=");
 | 
			
		||||
			if (s) {
 | 
			
		||||
				range_start = BB_STRTOOFF(s, &s, 10);
 | 
			
		||||
				if (s[0] != '-' || range_start < 0) {
 | 
			
		||||
					range_start = -1;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user