[前][次][番号順一覧][スレッド一覧]

ruby-changes:72550

From: Karl <ko1@a...>
Date: Fri, 15 Jul 2022 01:39:57 +0900 (JST)
Subject: [ruby-changes:72550] 509d0a9299 (master): [ruby/psych] Fix infinite loop bug after YAML_MEMORY_ERROR (psych issue #440)

https://git.ruby-lang.org/ruby.git/commit/?id=509d0a9299

From 509d0a92994e9b1ef497dbf84ed9e5faa1c8680d Mon Sep 17 00:00:00 2001
From: Karl Anderson <Karl.Anderson@s...>
Date: Thu, 28 Oct 2021 08:53:52 +0100
Subject: [ruby/psych] Fix infinite loop bug after YAML_MEMORY_ERROR (psych
 issue #440)

https://github.com/ruby/psych/commit/6c56700fb2
---
 ext/psych/psych_parser.c | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/ext/psych/psych_parser.c b/ext/psych/psych_parser.c
index fd550b671a..f91475b835 100644
--- a/ext/psych/psych_parser.c
+++ b/ext/psych/psych_parser.c
@@ -79,21 +79,25 @@ static VALUE allocate(VALUE klass) https://github.com/ruby/ruby/blob/trunk/ext/psych/psych_parser.c#L79
 
 static VALUE make_exception(yaml_parser_t * parser, VALUE path)
 {
-    size_t line, column;
-    VALUE ePsychSyntaxError;
+    if (parser->error == YAML_MEMORY_ERROR) {
+	return rb_eNoMemError;
+    } else {
+	size_t line, column;
+	VALUE ePsychSyntaxError;
 
-    line = parser->context_mark.line + 1;
-    column = parser->context_mark.column + 1;
+	line = parser->context_mark.line + 1;
+	column = parser->context_mark.column + 1;
 
-    ePsychSyntaxError = rb_const_get(mPsych, rb_intern("SyntaxError"));
+	ePsychSyntaxError = rb_const_get(mPsych, rb_intern("SyntaxError"));
 
-    return rb_funcall(ePsychSyntaxError, rb_intern("new"), 6,
-	    path,
-	    SIZET2NUM(line),
-	    SIZET2NUM(column),
-	    SIZET2NUM(parser->problem_offset),
-	    parser->problem ? rb_usascii_str_new2(parser->problem) : Qnil,
-	    parser->context ? rb_usascii_str_new2(parser->context) : Qnil);
+	return rb_funcall(ePsychSyntaxError, rb_intern("new"), 6,
+		path,
+		SIZET2NUM(line),
+		SIZET2NUM(column),
+		SIZET2NUM(parser->problem_offset),
+		parser->problem ? rb_usascii_str_new2(parser->problem) : Qnil,
+		parser->context ? rb_usascii_str_new2(parser->context) : Qnil);
+    }
 }
 
 static VALUE transcode_string(VALUE src, int * parser_encoding)
@@ -293,7 +297,7 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/psych/psych_parser.c#L297
 	VALUE event_args[5];
 	VALUE start_line, start_column, end_line, end_column;
 
-	if(!yaml_parser_parse(parser, &event)) {
+	if(parser->error || !yaml_parser_parse(parser, &event)) {
 	    VALUE exception;
 
 	    exception = make_exception(parser, path);
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]