Skip to content

Commit 5c2d616

Browse files
committed
only encode or decode tags after fully validating them
1 parent 22a5187 commit 5c2d616

1 file changed

Lines changed: 3 additions & 5 deletions

File tree

src/mrb_cbor.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,9 +1488,6 @@ encode_registered_tag_foreach(mrb_state *mrb, mrb_value sym, mrb_value mask, voi
14881488
const char *sname = mrb_sym_name_len(mrb, mrb_symbol(sym), &slen);
14891489
while (slen > 0 && sname[0] == '@') { sname++; slen--; }
14901490

1491-
encode_len(w, 3, (uint64_t)slen);
1492-
cbor_writer_write(w, (const uint8_t*)sname, (size_t)slen);
1493-
14941491
mrb_value val = mrb_iv_get(mrb, obj, mrb_symbol(sym));
14951492

14961493
if (mrb_integer_p(mask)) {
@@ -1550,6 +1547,8 @@ encode_registered_tag_foreach(mrb_state *mrb, mrb_value sym, mrb_value mask, voi
15501547
}
15511548
}
15521549

1550+
encode_len(w, 3, (uint64_t)slen);
1551+
cbor_writer_write(w, (const uint8_t*)sname, (size_t)slen);
15531552
encode_value(w, val);
15541553
return 0;
15551554
}
@@ -1563,10 +1562,9 @@ encode_registered_tag(CborWriter *w, mrb_value obj, mrb_int tag_num)
15631562
obj = mrb_funcall_argv(mrb, obj, MRB_SYM(_before_encode), 0, NULL);
15641563
}
15651564

1566-
encode_len(w, 6, (uint64_t)tag_num);
1567-
15681565
mrb_value schema = mrb_net_schema(mrb, mrb_class(mrb, obj));
15691566
if (likely(mrb_hash_p(schema))) {
1567+
encode_len(w, 6, (uint64_t)tag_num);
15701568
mrb_int n = mrb_hash_size(mrb, schema);
15711569
encode_len(w, 5, (uint64_t)n);
15721570

0 commit comments

Comments
 (0)