mruby-pack (pack_unpack): skip continuous extraction from unpack1

Ref #6134
This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-12-30 15:31:44 +09:00
parent 7765c23f69
commit 1871ff14db
+6
View File
@@ -1669,18 +1669,23 @@ pack_unpack(mrb_state *mrb, mrb_value str, int single)
switch (dir) {
case PACK_DIR_HEX:
srcidx += unpack_hex(mrb, sptr, srclen - srcidx, result, count, flags);
if (single) goto single_return;
continue;
case PACK_DIR_BSTR:
srcidx += unpack_bstr(mrb, sptr, srclen - srcidx, result, count, flags);
if (single) goto single_return;
continue;
case PACK_DIR_STR:
srcidx += unpack_str(mrb, sptr, srclen - srcidx, result, count, flags);
if (single) goto single_return;
continue;
case PACK_DIR_BASE64:
srcidx += unpack_base64(mrb, sptr, srclen - srcidx, result);
if (single) goto single_return;
continue;
case PACK_DIR_QENC:
srcidx += unpack_qenc(mrb, sptr, srclen - srcidx, result);
if (single) goto single_return;
continue;
default:
break;
@@ -1731,6 +1736,7 @@ pack_unpack(mrb_state *mrb, mrb_value str, int single)
}
}
if (single) {
single_return:
if (RARRAY_LEN(result) > 0) {
return RARRAY_PTR(result)[0];
}