[ruby/psych] Fix infinite loop bug after YAML_MEMORY_ERROR (psych issue #440)

https://github.com/ruby/psych/commit/6c56700fb2
This commit is contained in:
Karl Anderson 2021-10-28 08:53:52 +01:00 committed by git
parent a5471b616d
commit 509d0a9299

View File

@ -79,6 +79,9 @@ static VALUE allocate(VALUE klass)
static VALUE make_exception(yaml_parser_t * parser, VALUE path) static VALUE make_exception(yaml_parser_t * parser, VALUE path)
{ {
if (parser->error == YAML_MEMORY_ERROR) {
return rb_eNoMemError;
} else {
size_t line, column; size_t line, column;
VALUE ePsychSyntaxError; VALUE ePsychSyntaxError;
@ -95,6 +98,7 @@ static VALUE make_exception(yaml_parser_t * parser, VALUE path)
parser->problem ? rb_usascii_str_new2(parser->problem) : Qnil, parser->problem ? rb_usascii_str_new2(parser->problem) : Qnil,
parser->context ? rb_usascii_str_new2(parser->context) : Qnil); parser->context ? rb_usascii_str_new2(parser->context) : Qnil);
} }
}
static VALUE transcode_string(VALUE src, int * parser_encoding) static VALUE transcode_string(VALUE src, int * parser_encoding)
{ {
@ -293,7 +297,7 @@ static VALUE parse(int argc, VALUE *argv, VALUE self)
VALUE event_args[5]; VALUE event_args[5];
VALUE start_line, start_column, end_line, end_column; 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; VALUE exception;
exception = make_exception(parser, path); exception = make_exception(parser, path);