php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #62807
Patch ssh2_scp_send_fix_send_large_file_bug_for_0.11.3 revision 2012-08-13 12:49 UTC by chopins dot xiao at gmail dot com
revision 2012-08-13 12:47 UTC by chopins dot xiao at gmail dot com
Patch ssh2_scp_send_path revision 2012-08-13 12:27 UTC by chopins dot xiao at gmail dot com

Patch ssh2_scp_send_fix_send_large_file_bug_for_0.11.3 for ssh2 Bug #62807

Patch version 2012-08-13 12:49 UTC

Return to Bug #62807 | Download this patch
This patch renders other patches obsolete

Obsolete patches:

Patch Revisions:

Developer: chopins.xiao@gmail.com

1007a1008,1013
> 	ssize_t write_size;
> 	int nfds = 1;
> 	struct timeval timeout;
> 	int select_number;
> 	fd_set writefd;
> 	int ssh_fd;
1015d1020
< 
1042d1046
< 	libssh2_channel_set_blocking(remote_file, 1);
1043a1048,1052
> 	libssh2_channel_set_blocking(remote_file, 1);
> 	int send_none = 1;
> 	char buffer[8192];
> 	size_t toread;
> 	size_t bytesread;
1045,1048c1054,1057
< 		char buffer[8192];
< 		size_t toread = MIN(8192, ssb.sb.st_size);
< 		size_t bytesread = php_stream_read(local_file, buffer, toread);
< 
---
> 		if(send_none == 1) {
> 			toread = MIN(8192, ssb.sb.st_size);
> 			bytesread = php_stream_read(local_file, buffer, toread);
> 		}
1055,1056c1064,1092
< 
< 		if (bytesread != libssh2_channel_write(remote_file, buffer, bytesread)) {
---
> 		write_size = libssh2_channel_write(remote_file, buffer, bytesread);
> 		if(write_size < 0) {
> 			switch(write_size) {
> 				case LIBSSH2_ERROR_EAGAIN:
> 					php_error_docref(NULL TSRMLS_CC, E_WARNING,"System tcpsendspace is full");
> 				break;
> 				case LIBSSH2_ERROR_ALLOC:
> 					php_error_docref(NULL TSRMLS_CC,E_WARNING,"An internal memory allocation call failed");
> 				break;
> 				case LIBSSH2_ERROR_SOCKET_SEND:
> 					php_error_docref(NULL TSRMLS_CC,E_WARNING,"Unable to send data on socket");
> 				break;
> 				case LIBSSH2_ERROR_CHANNEL_CLOSED:
> 					php_error_docref(NULL TSRMLS_CC,E_WARNING,"The channel has been closed");
> 				break;
> 				case LIBSSH2_ERROR_CHANNEL_EOF_SENT:
> 					php_error_docref(NULL TSRMLS_CC,E_WARNING,"The channel has been requested to be closed");
> 				break;
> 				break;
> 			}
> 			RETURN_FALSE;
> 		}
> 		if(LIBSSH2_ERROR_NONE == write_size || LIBSSH2_ERROR_EAGAIN == write_size) {
> 			send_none = 0;
> 			continue;
> 		} else {
> 			send_none = 1;
> 		}
> 		if (write_size != bytesread) {
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 18 08:02:42 2024 UTC