msgpack 0.5.4-x86-mingw32 → 0.5.5-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +10 -3
- data/Rakefile +6 -1
- data/doclib/msgpack/packer.rb +6 -4
- data/doclib/msgpack/unpacker.rb +1 -1
- data/ext/msgpack/packer_class.c +7 -0
- data/ext/msgpack/unpacker.c +32 -3
- data/ext/msgpack/unpacker.h +2 -0
- data/ext/msgpack/unpacker_class.c +24 -16
- data/lib/msgpack/version.rb +1 -1
- data/msgpack.gemspec +1 -1
- metadata +8 -7
data/ChangeLog
CHANGED
@@ -1,16 +1,23 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
2013-05-12 version 0.5.5:
|
3
|
+
|
4
|
+
* Fixed SEGV problem in to_msgpack
|
5
|
+
* Fixed a possible race condition in MessagePack.load when it loads data from IO
|
6
|
+
* mingw32 package includes binary for ruby-2.0.0
|
7
|
+
|
8
|
+
|
9
|
+
2013-03-15 version 0.5.4:
|
3
10
|
|
4
11
|
* Added missing MessagePack::Unpacker#reset method
|
5
12
|
|
6
13
|
|
7
|
-
|
14
|
+
2013-02-14 version 0.5.3:
|
8
15
|
|
9
16
|
* Fixed segfault problem on Buffer#clear (reuse rmem internal fragment optimization)
|
10
17
|
* Fixed segfault problem on Buffer (rmem free code)
|
11
18
|
|
12
19
|
|
13
|
-
|
20
|
+
2013-02-07 version 0.5.2:
|
14
21
|
|
15
22
|
* Fixed invalid pack/unpack on 32bit architecture such as Win32
|
16
23
|
* Disable rmem on Rubinius because rmem is not thread safe
|
data/Rakefile
CHANGED
@@ -70,6 +70,11 @@ task :default => :build
|
|
70
70
|
# echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
|
71
71
|
# exec $SHELL -l
|
72
72
|
#
|
73
|
+
### install cross-compiled ruby 2.0.0
|
74
|
+
# rbenv install 2.0.0-p0
|
75
|
+
# gem install rake-compiler
|
76
|
+
# rake-compiler cross-ruby VERSION=2.0.0-p0
|
77
|
+
#
|
73
78
|
### install cross-compiled ruby 1.9.3
|
74
79
|
# rbenv install 1.9.3-p327
|
75
80
|
# gem install rake-compiler
|
@@ -83,6 +88,6 @@ task :default => :build
|
|
83
88
|
### build gem
|
84
89
|
# rbenv shell 1.8.7-p371
|
85
90
|
# gem install bundler && bundle
|
86
|
-
# rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.3
|
91
|
+
# rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.3:2.0.0
|
87
92
|
#
|
88
93
|
|
data/doclib/msgpack/packer.rb
CHANGED
@@ -24,7 +24,7 @@ module MessagePack
|
|
24
24
|
#
|
25
25
|
# Internal buffer
|
26
26
|
#
|
27
|
-
# @return MessagePack::
|
27
|
+
# @return MessagePack::Buffer
|
28
28
|
#
|
29
29
|
attr_reader :buffer
|
30
30
|
|
@@ -54,7 +54,7 @@ module MessagePack
|
|
54
54
|
#
|
55
55
|
# @return [Packer] self
|
56
56
|
#
|
57
|
-
def write_array_header(
|
57
|
+
def write_array_header(n)
|
58
58
|
end
|
59
59
|
|
60
60
|
#
|
@@ -63,12 +63,12 @@ module MessagePack
|
|
63
63
|
#
|
64
64
|
# @return [Packer] self
|
65
65
|
#
|
66
|
-
def write_map_header(
|
66
|
+
def write_map_header(n)
|
67
67
|
end
|
68
68
|
|
69
69
|
#
|
70
70
|
# Flushes data in the internal buffer to the internal IO. Same as _buffer.flush.
|
71
|
-
# If internal IO is not set, it
|
71
|
+
# If internal IO is not set, it does nothing.
|
72
72
|
#
|
73
73
|
# @return [Packer] self
|
74
74
|
#
|
@@ -108,6 +108,8 @@ module MessagePack
|
|
108
108
|
def to_str
|
109
109
|
end
|
110
110
|
|
111
|
+
alias to_s to_str
|
112
|
+
|
111
113
|
#
|
112
114
|
# Returns content of the internal buffer as an array of strings. Same as buffer.to_a.
|
113
115
|
# This method is faster than _to_str_.
|
data/doclib/msgpack/unpacker.rb
CHANGED
data/ext/msgpack/packer_class.c
CHANGED
@@ -230,6 +230,13 @@ VALUE MessagePack_pack(int argc, VALUE* argv)
|
|
230
230
|
}
|
231
231
|
|
232
232
|
msgpack_buffer_clear(PACKER_BUFFER_(pk)); /* to free rmem before GC */
|
233
|
+
|
234
|
+
#ifdef RB_GC_GUARD
|
235
|
+
/* This prevents compilers from optimizing out the `self` variable
|
236
|
+
* from stack. Otherwise GC free()s it. */
|
237
|
+
RB_GC_GUARD(self);
|
238
|
+
#endif
|
239
|
+
|
233
240
|
return retval;
|
234
241
|
}
|
235
242
|
|
data/ext/msgpack/unpacker.c
CHANGED
@@ -17,6 +17,16 @@
|
|
17
17
|
*/
|
18
18
|
|
19
19
|
#include "unpacker.h"
|
20
|
+
#include "rmem.h"
|
21
|
+
|
22
|
+
#if !defined(DISABLE_RMEM) && !defined(DISABLE_UNPACKER_STACK_RMEM) && \
|
23
|
+
MSGPACK_UNPACKER_STACK_CAPACITY * MSGPACK_UNPACKER_STACK_SIZE <= MSGPACK_RMEM_PAGE_SIZE
|
24
|
+
#define UNPACKER_STACK_RMEM
|
25
|
+
#endif
|
26
|
+
|
27
|
+
#ifdef UNPACKER_STACK_RMEM
|
28
|
+
static msgpack_rmem_t s_stack_rmem;
|
29
|
+
#endif
|
20
30
|
|
21
31
|
#ifdef COMPAT_HAVE_ENCODING /* see compat.h*/
|
22
32
|
static int s_enc_utf8;
|
@@ -24,13 +34,21 @@ static int s_enc_utf8;
|
|
24
34
|
|
25
35
|
void msgpack_unpacker_static_init()
|
26
36
|
{
|
37
|
+
#ifdef UNPACKER_STACK_RMEM
|
38
|
+
msgpack_rmem_init(&s_stack_rmem);
|
39
|
+
#endif
|
40
|
+
|
27
41
|
#ifdef COMPAT_HAVE_ENCODING
|
28
42
|
s_enc_utf8 = rb_utf8_encindex();
|
29
43
|
#endif
|
30
44
|
}
|
31
45
|
|
32
46
|
void msgpack_unpacker_static_destroy()
|
33
|
-
{
|
47
|
+
{
|
48
|
+
#ifdef UNPACKER_STACK_RMEM
|
49
|
+
msgpack_rmem_destroy(&s_stack_rmem);
|
50
|
+
#endif
|
51
|
+
}
|
34
52
|
|
35
53
|
#define HEAD_BYTE_REQUIRED 0xc6
|
36
54
|
|
@@ -45,13 +63,24 @@ void msgpack_unpacker_init(msgpack_unpacker_t* uk)
|
|
45
63
|
uk->last_object = Qnil;
|
46
64
|
uk->reading_raw = Qnil;
|
47
65
|
|
48
|
-
|
66
|
+
#ifdef UNPACKER_STACK_RMEM
|
67
|
+
uk->stack = msgpack_rmem_alloc(&s_stack_rmem);
|
68
|
+
/*memset(uk->stack, 0, MSGPACK_UNPACKER_STACK_CAPACITY);*/
|
69
|
+
#else
|
70
|
+
/*uk->stack = calloc(MSGPACK_UNPACKER_STACK_CAPACITY, sizeof(msgpack_unpacker_stack_t));*/
|
71
|
+
uk->stack = malloc(MSGPACK_UNPACKER_STACK_CAPACITY * sizeof(msgpack_unpacker_stack_t));
|
72
|
+
#endif
|
49
73
|
uk->stack_capacity = MSGPACK_UNPACKER_STACK_CAPACITY;
|
50
74
|
}
|
51
75
|
|
52
76
|
void msgpack_unpacker_destroy(msgpack_unpacker_t* uk)
|
53
77
|
{
|
78
|
+
#ifdef UNPACKER_STACK_RMEM
|
79
|
+
msgpack_rmem_free(&s_stack_rmem, uk->stack);
|
80
|
+
#else
|
54
81
|
free(uk->stack);
|
82
|
+
#endif
|
83
|
+
|
55
84
|
msgpack_buffer_destroy(UNPACKER_BUFFER_(uk));
|
56
85
|
}
|
57
86
|
|
@@ -78,7 +107,7 @@ void msgpack_unpacker_reset(msgpack_unpacker_t* uk)
|
|
78
107
|
|
79
108
|
uk->head_byte = HEAD_BYTE_REQUIRED;
|
80
109
|
|
81
|
-
memset(uk->stack, 0, sizeof(msgpack_unpacker_t) * uk->stack_depth)
|
110
|
+
/*memset(uk->stack, 0, sizeof(msgpack_unpacker_t) * uk->stack_depth);*/
|
82
111
|
uk->stack_depth = 0;
|
83
112
|
|
84
113
|
uk->last_object = Qnil;
|
data/ext/msgpack/unpacker.h
CHANGED
@@ -22,8 +22,8 @@
|
|
22
22
|
|
23
23
|
VALUE cMessagePack_Unpacker;
|
24
24
|
|
25
|
-
static VALUE s_unpacker_value;
|
26
|
-
static msgpack_unpacker_t* s_unpacker;
|
25
|
+
//static VALUE s_unpacker_value;
|
26
|
+
//static msgpack_unpacker_t* s_unpacker;
|
27
27
|
|
28
28
|
static VALUE eUnpackError;
|
29
29
|
static VALUE eMalformedFormatError;
|
@@ -303,32 +303,40 @@ VALUE MessagePack_unpack(int argc, VALUE* argv)
|
|
303
303
|
src = Qnil;
|
304
304
|
}
|
305
305
|
|
306
|
-
|
307
|
-
|
308
|
-
//
|
309
|
-
|
310
|
-
|
306
|
+
VALUE self = Unpacker_alloc(cMessagePack_Unpacker);
|
307
|
+
UNPACKER(self, uk);
|
308
|
+
//msgpack_unpacker_reset(s_unpacker);
|
309
|
+
//msgpack_buffer_reset_io(UNPACKER_BUFFER_(s_unpacker));
|
310
|
+
|
311
|
+
/* prefer reference than copying */
|
312
|
+
msgpack_buffer_set_write_reference_threshold(UNPACKER_BUFFER_(uk), 0);
|
311
313
|
|
312
314
|
if(io != Qnil) {
|
313
|
-
MessagePack_Buffer_initialize(UNPACKER_BUFFER_(
|
315
|
+
MessagePack_Buffer_initialize(UNPACKER_BUFFER_(uk), io, Qnil);
|
314
316
|
}
|
315
317
|
|
316
318
|
if(src != Qnil) {
|
317
319
|
/* prefer reference than copying; see MessagePack_Unpacker_module_init */
|
318
|
-
msgpack_buffer_append_string(UNPACKER_BUFFER_(
|
320
|
+
msgpack_buffer_append_string(UNPACKER_BUFFER_(uk), src);
|
319
321
|
}
|
320
322
|
|
321
|
-
int r = msgpack_unpacker_read(
|
323
|
+
int r = msgpack_unpacker_read(uk, 0);
|
322
324
|
if(r < 0) {
|
323
325
|
raise_unpacker_error(r);
|
324
326
|
}
|
325
327
|
|
326
328
|
/* raise if extra bytes follow */
|
327
|
-
if(msgpack_buffer_top_readable_size(UNPACKER_BUFFER_(
|
329
|
+
if(msgpack_buffer_top_readable_size(UNPACKER_BUFFER_(uk)) > 0) {
|
328
330
|
rb_raise(eMalformedFormatError, "extra bytes follow after a deserialized object");
|
329
331
|
}
|
330
332
|
|
331
|
-
|
333
|
+
#ifdef RB_GC_GUARD
|
334
|
+
/* This prevents compilers from optimizing out the `self` variable
|
335
|
+
* from stack. Otherwise GC free()s it. */
|
336
|
+
RB_GC_GUARD(self);
|
337
|
+
#endif
|
338
|
+
|
339
|
+
return msgpack_unpacker_get_last_object(uk);
|
332
340
|
}
|
333
341
|
|
334
342
|
static VALUE MessagePack_load_module_method(int argc, VALUE* argv, VALUE mod)
|
@@ -373,11 +381,11 @@ void MessagePack_Unpacker_module_init(VALUE mMessagePack)
|
|
373
381
|
rb_define_method(cMessagePack_Unpacker, "feed_each", Unpacker_feed_each, 1);
|
374
382
|
rb_define_method(cMessagePack_Unpacker, "reset", Unpacker_reset, 0);
|
375
383
|
|
376
|
-
s_unpacker_value = Unpacker_alloc(cMessagePack_Unpacker);
|
377
|
-
rb_gc_register_address(&s_unpacker_value);
|
378
|
-
Data_Get_Struct(s_unpacker_value, msgpack_unpacker_t, s_unpacker);
|
384
|
+
//s_unpacker_value = Unpacker_alloc(cMessagePack_Unpacker);
|
385
|
+
//rb_gc_register_address(&s_unpacker_value);
|
386
|
+
//Data_Get_Struct(s_unpacker_value, msgpack_unpacker_t, s_unpacker);
|
379
387
|
/* prefer reference than copying */
|
380
|
-
msgpack_buffer_set_write_reference_threshold(UNPACKER_BUFFER_(s_unpacker), 0);
|
388
|
+
//msgpack_buffer_set_write_reference_threshold(UNPACKER_BUFFER_(s_unpacker), 0);
|
381
389
|
|
382
390
|
/* MessagePack.unpack(x) */
|
383
391
|
rb_define_module_function(mMessagePack, "load", MessagePack_load_module_method, -1);
|
data/lib/msgpack/version.rb
CHANGED
data/msgpack.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
|
19
19
|
s.add_development_dependency 'bundler', ['~> 1.0']
|
20
20
|
s.add_development_dependency 'rake', ['~> 0.9.2']
|
21
|
-
s.add_development_dependency 'rake-compiler', ['~> 0.8.
|
21
|
+
s.add_development_dependency 'rake-compiler', ['~> 0.8.3']
|
22
22
|
s.add_development_dependency 'rspec', ['~> 2.11']
|
23
23
|
s.add_development_dependency 'json', ['~> 1.7']
|
24
24
|
s.add_development_dependency 'yard', ['~> 0.8.2']
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 5
|
10
|
+
version: 0.5.5
|
11
11
|
platform: x86-mingw32
|
12
12
|
authors:
|
13
13
|
- FURUHASHI Sadayuki
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-
|
18
|
+
date: 2013-05-13 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -56,12 +56,12 @@ dependencies:
|
|
56
56
|
requirements:
|
57
57
|
- - ~>
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
hash:
|
59
|
+
hash: 57
|
60
60
|
segments:
|
61
61
|
- 0
|
62
62
|
- 8
|
63
|
-
-
|
64
|
-
version: 0.8.
|
63
|
+
- 3
|
64
|
+
version: 0.8.3
|
65
65
|
name: rake-compiler
|
66
66
|
version_requirements: *id003
|
67
67
|
prerelease: false
|
@@ -169,6 +169,7 @@ files:
|
|
169
169
|
- spec/unpacker_spec.rb
|
170
170
|
- lib/msgpack/1.8/msgpack.so
|
171
171
|
- lib/msgpack/1.9/msgpack.so
|
172
|
+
- lib/msgpack/2.0/msgpack.so
|
172
173
|
has_rdoc: true
|
173
174
|
homepage: http://msgpack.org/
|
174
175
|
licenses: []
|