From f61dc0d618d7316a481efef9f3dc5192e9fbfed3 Mon Sep 17 00:00:00 2001 From: Ricardo Amendoeira Date: Fri, 19 Nov 2021 11:15:19 +0000 Subject: [PATCH] Update XML::Builder to safely handle exceptions raised in blocks Co-authored-by: Joana Tavares --- lib/nokogiri/xml/builder.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/nokogiri/xml/builder.rb b/lib/nokogiri/xml/builder.rb index 98bb075b72..80428f6d4f 100644 --- a/lib/nokogiri/xml/builder.rb +++ b/lib/nokogiri/xml/builder.rb @@ -425,15 +425,18 @@ def method_missing(method, *args, &block) # :nodoc: def insert(node, &block) node = @parent.add_child(node) if block - old_parent = @parent - @parent = node - @arity ||= block.arity - if @arity <= 0 - instance_eval(&block) - else - yield(self) + begin + old_parent = @parent + @parent = node + @arity ||= block.arity + if @arity <= 0 + instance_eval(&block) + else + yield(self) + end + ensure + @parent = old_parent end - @parent = old_parent end NodeBuilder.new(node, self) end