Skip to content

Commit 07ffbfb

Browse files
committed
Raise unknown tag in deserialization
1 parent e313c9c commit 07ffbfb

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

ext/liquid_c/block.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ static ID
1919
intern_parse,
2020
intern_square_brackets,
2121
intern_unknown_tag_in_liquid_tag,
22-
intern_ivar_nodelist;
22+
intern_ivar_nodelist,
23+
intern_raise_unknown_tag;
2324

2425
static VALUE tag_registry;
2526
static VALUE variable_placeholder = Qnil;
27+
static VALUE cLiquidBlock;
2628

2729
typedef struct parse_context {
2830
tokenizer_t *tokenizer;
@@ -375,7 +377,9 @@ static VALUE block_body_parse_from_serialize(block_body_t *body, VALUE tokenizer
375377
VALUE markup = rb_utf8_str_new(tag_markup_header_markup(current_tag), current_tag->markup_len);
376378

377379
VALUE tag_class = rb_funcall(tag_registry, intern_square_brackets, 1, tag_name);
378-
assert(RTEST(tag_class));
380+
if (!RTEST(tag_class)) {
381+
return rb_funcall(cLiquidBlock, intern_raise_unknown_tag, 4, tag_name, Qnil, Qnil, parse_context_obj);
382+
}
379383

380384
serialize_parse_context_enter_tag(serialize_context, current_tag);
381385
VALUE new_tag = rb_funcall(tag_class, intern_parse, 4,
@@ -700,13 +704,17 @@ void liquid_define_block_body()
700704
intern_square_brackets = rb_intern("[]");
701705
intern_unknown_tag_in_liquid_tag = rb_intern("unknown_tag_in_liquid_tag");
702706
intern_ivar_nodelist = rb_intern("@nodelist");
707+
intern_raise_unknown_tag = rb_intern("raise_unknown_tag");
703708

704709
tag_registry = rb_funcall(cLiquidTemplate, rb_intern("tags"), 0);
705710
rb_global_variable(&tag_registry);
706711

707712
VALUE cLiquidCBlockBody = rb_define_class_under(mLiquidC, "BlockBody", rb_cObject);
708713
rb_define_alloc_func(cLiquidCBlockBody, block_body_allocate);
709714

715+
cLiquidBlock = rb_const_get(mLiquid, rb_intern("Block"));
716+
rb_global_variable(&cLiquidBlock);
717+
710718
rb_define_method(cLiquidCBlockBody, "initialize", block_body_initialize, 1);
711719
rb_define_method(cLiquidCBlockBody, "parse", block_body_parse, 2);
712720
rb_define_method(cLiquidCBlockBody, "freeze", block_body_freeze, 0);

0 commit comments

Comments
 (0)