msgpack 1.7.2 → 1.7.3
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.
- checksums.yaml +4 -4
- data/ChangeLog +4 -0
- data/README.md +21 -12
- data/ext/msgpack/unpacker.c +13 -6
- data/lib/msgpack/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe6adcd787be2f8c3e9459d46c3baa4ad81c5b08bdcaeb9bfec9a80c9a4540c6
|
4
|
+
data.tar.gz: 76d6be5a37a2b6e225ad995e6b0f670d0489839a98b678c9332837bd082e7d7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36b0e748e7b54baad2ecef8c1c071a82cf3e6bd26540fd433a3c71f1e77afe341188594a26bfed817f84af10ef4f613ded14fc0a8448a77dc4978683cf7c35d1
|
7
|
+
data.tar.gz: 45ce3770a12b3580945ba3dd42d40ab8ba24a167f675f71d57bb42af6cf4ab204d7cc7960925ea78556988f523886fd92b431789a174e0529143ab0908d52418
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -8,15 +8,24 @@ and typical short strings only require an extra byte in addition to the strings
|
|
8
8
|
If you ever wished to use JSON for convenience (storing an image with metadata) but could
|
9
9
|
not for technical reasons (binary data, size, speed...), MessagePack is a perfect replacement.
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
```ruby
|
12
|
+
require 'msgpack'
|
13
|
+
msg = [1,2,3].to_msgpack #=> "\x93\x01\x02\x03"
|
14
|
+
MessagePack.unpack(msg) #=> [1,2,3]
|
15
|
+
```
|
16
|
+
|
17
|
+
Add msgpack to your Gemfile to install with Bundler:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
# Gemfile
|
21
|
+
gem 'msgpack'
|
22
|
+
```
|
14
23
|
|
15
|
-
|
24
|
+
Or, use RubyGems to install:
|
16
25
|
|
17
26
|
gem install msgpack
|
18
27
|
|
19
|
-
|
28
|
+
Or, build msgpack-ruby and install from a checked-out msgpack-ruby repository:
|
20
29
|
|
21
30
|
bundle
|
22
31
|
rake
|
@@ -27,11 +36,11 @@ or build msgpack-ruby and install:
|
|
27
36
|
|
28
37
|
* Create REST API returing MessagePack using Rails + [RABL](https://github.com/nesquena/rabl)
|
29
38
|
* Store objects efficiently serialized by msgpack on memcached or Redis
|
30
|
-
* In fact Redis supports msgpack in [EVAL-scripts](
|
39
|
+
* In fact Redis supports msgpack in [EVAL-scripts](https://redis.io/docs/latest/commands/eval/)
|
31
40
|
* Upload data in efficient format from mobile devices such as smartphones
|
32
41
|
* MessagePack works on iPhone/iPad and Android. See also [Objective-C](https://github.com/msgpack/msgpack-objectivec) and [Java](https://github.com/msgpack/msgpack-java) implementations
|
33
42
|
* Design a portable protocol to communicate with embedded devices
|
34
|
-
* Check also [Fluentd](
|
43
|
+
* Check also [Fluentd](https://www.fluentd.org) which is a log collector which uses msgpack for the log format (they say it uses JSON but actually it's msgpack, which is compatible with JSON)
|
35
44
|
* Exchange objects between software components written in different languages
|
36
45
|
* You'll need a flexible but efficient format so that components exchange objects while keeping compatibility
|
37
46
|
|
@@ -128,9 +137,9 @@ being serialized altogether by throwing an exception:
|
|
128
137
|
|
129
138
|
```ruby
|
130
139
|
class Symbol
|
131
|
-
|
132
|
-
|
133
|
-
|
140
|
+
def to_msgpack_ext
|
141
|
+
raise "Serialization of symbols prohibited"
|
142
|
+
end
|
134
143
|
end
|
135
144
|
|
136
145
|
MessagePack::DefaultFactory.register_type(0x00, Symbol)
|
@@ -276,8 +285,8 @@ If this directory has Gemfile.lock (generated with MRI), remove it beforehand.
|
|
276
285
|
|
277
286
|
## Updating documents
|
278
287
|
|
279
|
-
Online
|
280
|
-
|
288
|
+
Online documentation (https://ruby.msgpack.org) is generated from the gh-pages branch.
|
289
|
+
To update documents in gh-pages branch:
|
281
290
|
|
282
291
|
bundle exec rake doc
|
283
292
|
git checkout gh-pages
|
data/ext/msgpack/unpacker.c
CHANGED
@@ -20,6 +20,7 @@
|
|
20
20
|
#include "rmem.h"
|
21
21
|
#include "extension_value_class.h"
|
22
22
|
#include <assert.h>
|
23
|
+
#include <limits.h>
|
23
24
|
|
24
25
|
#if !defined(HAVE_RB_PROC_CALL_WITH_BLOCK)
|
25
26
|
#define rb_proc_call_with_block(recv, argc, argv, block) rb_funcallv(recv, rb_intern("call"), argc, argv)
|
@@ -27,6 +28,7 @@
|
|
27
28
|
|
28
29
|
static int RAW_TYPE_STRING = 256;
|
29
30
|
static int RAW_TYPE_BINARY = 257;
|
31
|
+
static int16_t INITIAL_BUFFER_CAPACITY_MAX = SHRT_MAX;
|
30
32
|
|
31
33
|
static msgpack_rmem_t s_stack_rmem;
|
32
34
|
|
@@ -37,6 +39,11 @@ static inline VALUE rb_hash_new_capa(long capa)
|
|
37
39
|
}
|
38
40
|
#endif
|
39
41
|
|
42
|
+
static inline int16_t initial_buffer_size(long size)
|
43
|
+
{
|
44
|
+
return (size > INITIAL_BUFFER_CAPACITY_MAX) ? INITIAL_BUFFER_CAPACITY_MAX : size;
|
45
|
+
}
|
46
|
+
|
40
47
|
void msgpack_unpacker_static_init(void)
|
41
48
|
{
|
42
49
|
assert(sizeof(msgpack_unpacker_stack_entry_t) * MSGPACK_UNPACKER_STACK_CAPACITY <= MSGPACK_RMEM_PAGE_SIZE);
|
@@ -375,14 +382,14 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
375
382
|
if(count == 0) {
|
376
383
|
return object_complete(uk, rb_ary_new());
|
377
384
|
}
|
378
|
-
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_ARRAY, count, rb_ary_new2(count));
|
385
|
+
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_ARRAY, count, rb_ary_new2(initial_buffer_size(count)));
|
379
386
|
|
380
387
|
SWITCH_RANGE(b, 0x80, 0x8f) // FixMap
|
381
388
|
int count = b & 0x0f;
|
382
389
|
if(count == 0) {
|
383
390
|
return object_complete(uk, rb_hash_new());
|
384
391
|
}
|
385
|
-
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_MAP_KEY, count*2, rb_hash_new_capa(count));
|
392
|
+
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_MAP_KEY, count*2, rb_hash_new_capa(initial_buffer_size(count)));
|
386
393
|
|
387
394
|
SWITCH_RANGE(b, 0xc0, 0xdf) // Variable
|
388
395
|
switch(b) {
|
@@ -605,7 +612,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
605
612
|
if(count == 0) {
|
606
613
|
return object_complete(uk, rb_ary_new());
|
607
614
|
}
|
608
|
-
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_ARRAY, count, rb_ary_new2(count));
|
615
|
+
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_ARRAY, count, rb_ary_new2(initial_buffer_size(count)));
|
609
616
|
}
|
610
617
|
|
611
618
|
case 0xdd: // array 32
|
@@ -615,7 +622,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
615
622
|
if(count == 0) {
|
616
623
|
return object_complete(uk, rb_ary_new());
|
617
624
|
}
|
618
|
-
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_ARRAY, count, rb_ary_new2(count));
|
625
|
+
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_ARRAY, count, rb_ary_new2(initial_buffer_size(count)));
|
619
626
|
}
|
620
627
|
|
621
628
|
case 0xde: // map 16
|
@@ -625,7 +632,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
625
632
|
if(count == 0) {
|
626
633
|
return object_complete(uk, rb_hash_new());
|
627
634
|
}
|
628
|
-
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_MAP_KEY, count*2, rb_hash_new_capa(count));
|
635
|
+
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_MAP_KEY, count*2, rb_hash_new_capa(initial_buffer_size(count)));
|
629
636
|
}
|
630
637
|
|
631
638
|
case 0xdf: // map 32
|
@@ -635,7 +642,7 @@ static int read_primitive(msgpack_unpacker_t* uk)
|
|
635
642
|
if(count == 0) {
|
636
643
|
return object_complete(uk, rb_hash_new());
|
637
644
|
}
|
638
|
-
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_MAP_KEY, count*2, rb_hash_new_capa(count));
|
645
|
+
return _msgpack_unpacker_stack_push(uk, STACK_TYPE_MAP_KEY, count*2, rb_hash_new_capa(initial_buffer_size(count)));
|
639
646
|
}
|
640
647
|
|
641
648
|
default:
|
data/lib/msgpack/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2024-10-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -208,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
208
|
- !ruby/object:Gem::Version
|
209
209
|
version: '0'
|
210
210
|
requirements: []
|
211
|
-
rubygems_version: 3.
|
211
|
+
rubygems_version: 3.5.11
|
212
212
|
signing_key:
|
213
213
|
specification_version: 4
|
214
214
|
summary: MessagePack, a binary-based efficient data interchange format.
|