net-sftp 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
@@ -1,4 +1,8 @@
1
1
 
2
+ === 2.1.2 / 07 May 2013
3
+
4
+ * Fix fragmentation download failure [accardi]
5
+
2
6
  === 2.1.0 / 06 Feb 2013
3
7
 
4
8
  * Added public cert. All gem releases are now signed. See INSTALL in readme.
@@ -898,7 +898,7 @@ module Net; module SFTP
898
898
  @packet_length = input.read_long
899
899
  end
900
900
 
901
- return unless input.length >= @packet_length
901
+ return unless input.length >= @packet_length + 4
902
902
  packet = Net::SFTP::Packet.new(input.read(@packet_length))
903
903
  input.consume!
904
904
  @packet_length = nil
@@ -6,7 +6,7 @@ module Net; module SFTP
6
6
  class Version < Net::SSH::Version
7
7
  MAJOR = 2
8
8
  MINOR = 1
9
- TINY = 1
9
+ TINY = 2
10
10
 
11
11
  # The current version, as a Version instance
12
12
  CURRENT = new(MAJOR, MINOR, TINY)
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "net-sftp"
8
- s.version = "2.1.1"
8
+ s.version = "2.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jamis Buck", "Delano Mandelbaum"]
12
12
  s.cert_chain = ["gem-public_cert.pem"]
13
- s.date = "2013-02-06"
13
+ s.date = "2013-05-07"
14
14
  s.description = "A pure Ruby implementation of the SFTP client protocol"
15
15
  s.email = "net-ssh@solutious.com"
16
16
  s.extra_rdoc_files = [
@@ -125,6 +125,18 @@ class Net::SSH::Test::Channel
125
125
  gets_data(sftp_packet(type, *args))
126
126
  end
127
127
 
128
+ def gets_packet_in_two(fragment_len, type, *args)
129
+ fragment_len ||= 0
130
+ whole_packet = sftp_packet(type, *args)
131
+
132
+ if 0 < fragment_len && fragment_len < whole_packet.length
133
+ gets_data(whole_packet[0, whole_packet.length - fragment_len])
134
+ gets_data(whole_packet[-fragment_len..-1])
135
+ else
136
+ gets_data(whole_packet)
137
+ end
138
+ end
139
+
128
140
  def sends_packet(type, *args)
129
141
  sends_data(sftp_packet(type, *args))
130
142
  end
@@ -21,6 +21,20 @@ class DownloadTest < Net::SFTP::TestCase
21
21
  assert_equal text, file.string
22
22
  end
23
23
 
24
+ def test_download_file_should_transfer_remote_to_local_in_spite_of_fragmentation
25
+ local = "/path/to/local"
26
+ remote = "/path/to/remote"
27
+ text = "this is some text\n"
28
+
29
+ expect_file_transfer(remote, text, :fragment_len => 1)
30
+
31
+ file = StringIO.new
32
+ File.stubs(:open).with(local, "wb").returns(file)
33
+
34
+ assert_scripted_command { sftp.download(remote, local) }
35
+ assert_equal text, file.string
36
+ end
37
+
24
38
  def test_download_large_file_should_transfer_remote_to_local
25
39
  local = "/path/to/local"
26
40
  remote = "/path/to/remote"
@@ -130,12 +144,12 @@ class DownloadTest < Net::SFTP::TestCase
130
144
 
131
145
  private
132
146
 
133
- def expect_file_transfer(remote, text)
147
+ def expect_file_transfer(remote, text, opts={})
134
148
  expect_sftp_session :server_version => 3 do |channel|
135
149
  channel.sends_packet(FXP_OPEN, :long, 0, :string, remote, :long, 0x01, :long, 0)
136
150
  channel.gets_packet(FXP_HANDLE, :long, 0, :string, "handle")
137
151
  channel.sends_packet(FXP_READ, :long, 1, :string, "handle", :int64, 0, :long, 32_000)
138
- channel.gets_packet(FXP_DATA, :long, 1, :string, text)
152
+ channel.gets_packet_in_two(opts[:fragment_len], FXP_DATA, :long, 1, :string, text)
139
153
  channel.sends_packet(FXP_READ, :long, 2, :string, "handle", :int64, text.bytesize, :long, 32_000)
140
154
  channel.gets_packet(FXP_STATUS, :long, 2, :long, 1)
141
155
  channel.sends_packet(FXP_CLOSE, :long, 3, :string, "handle")
@@ -160,7 +174,7 @@ class DownloadTest < Net::SFTP::TestCase
160
174
  channel.sends_packet(FXP_CLOSE, :long, data_packet_count + 2, :string, "handle")
161
175
  channel.gets_packet(FXP_STATUS, :long, data_packet_count + 2, :long, 0)
162
176
  end
163
-
177
+
164
178
  file = StringIO.new
165
179
  File.stubs(:open).with(local, "wb").returns(file)
166
180
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-sftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -38,7 +38,7 @@ cert_chain:
38
38
  MVhNUThCTTJKejBYb1BhblBlMzU0K2xXd2pwa1JLYkZvdy9aYlFIY0NMQ3Ey
39
39
  NCtONmI2ZwpkZ0tmTkR6d2lEcHFDQT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
40
40
  LS0tLS0K
41
- date: 2013-02-06 00:00:00.000000000 Z
41
+ date: 2013-05-07 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: net-ssh
metadata.gz.sig CHANGED
Binary file