projects
/
ruby-eet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Chunk.deserialize fails if the given buffer is empty.
[ruby-eet.git]
/
lib
/
eet.rb
diff --git
a/lib/eet.rb
b/lib/eet.rb
index 8a949845063a5baf1ef8e0c75fa3ec7b9741dcfa..8a2893ef3b6b631cd44119684879bc0a7fa99dbb 100644
(file)
--- a/
lib/eet.rb
+++ b/
lib/eet.rb
@@
-1,5
+1,5
@@
#--
#--
-# $Id: eet.rb
34 2005-04-30 13:15:19
Z tilman $
+# $Id: eet.rb
46 2005-05-25 20:10:37
Z tilman $
#
# Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
#
#
# Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
#
@@
-46,7
+46,7
@@
class Object
props.each_pair do |tag, arg|
unless arg.is_a?(Array)
props.each_pair do |tag, arg|
unless arg.is_a?(Array)
- raise(Eet::PropertyError, "hash value not an array")
+ raise(Eet::PropertyError, "hash value
is
not an array")
end
value, type = arg
end
value, type = arg
@@
-124,13
+124,13
@@
end
class TrueClass # :nodoc:
def to_eet_chunks(tag, type = nil)
class TrueClass # :nodoc:
def to_eet_chunks(tag, type = nil)
- [Eet::Chunk.new(tag,
[1].pack("c")
)]
+ [Eet::Chunk.new(tag,
"\1"
)]
end
end
class FalseClass # :nodoc:
def to_eet_chunks(tag, type = nil)
end
end
class FalseClass # :nodoc:
def to_eet_chunks(tag, type = nil)
- [Eet::Chunk.new(tag,
[0].pack("c")
)]
+ [Eet::Chunk.new(tag,
"\0"
)]
end
end
end
end
@@
-161,17
+161,24
@@
module Eet
class PropertyError < EetError; end
class ChunkError < EetError; end
class PropertyError < EetError; end
class ChunkError < EetError; end
- class Stream
< Array
# :nodoc:
+ class Stream # :nodoc:
def initialize(chunk = nil)
super(chunk.nil? ? 0 : 1, chunk)
end
def Stream.deserialize(data)
def initialize(chunk = nil)
super(chunk.nil? ? 0 : 1, chunk)
end
def Stream.deserialize(data)
- data = data.to_str.dup
+ if data.to_str.empty?
+ raise(ArgumentError, "buffer is empty")
+ end
+
s = Stream.new
s = Stream.new
+ offset = 0
+
+ while offset < data.length
+ c, bytes = Chunk.deserialize(data[offset..-1])
- while data.length > 0
- s << Chunk.deserialize(data)
+ s << c
+ offset += bytes
end
s
end
s
@@
-198,6
+205,10
@@
module Eet
end
def Chunk.deserialize(data)
end
def Chunk.deserialize(data)
+ if data.to_str.empty?
+ raise(ArgumentError, "buffer is empty")
+ end
+
if data.length < 8 || data[0, 4] != "CHnK"
raise(ChunkError, "invalid data")
end
if data.length < 8 || data[0, 4] != "CHnK"
raise(ChunkError, "invalid data")
end
@@
-213,9
+224,7
@@
module Eet
c = Chunk.new(*data[8, size].split("\0", 2))
c = Chunk.new(*data[8, size].split("\0", 2))
- data.replace(data[8 + size..-1] || "")
-
- c
+ [c, 8 + size]
end
end
end
end
end
end