mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/psych/yaml/emitter.c: merge libyaml 0.1.5
* ext/psych/yaml/loader.c: ditto * ext/psych/yaml/parser.c: ditto * ext/psych/yaml/reader.c: ditto * ext/psych/yaml/scanner.c: ditto * ext/psych/yaml/writer.c: ditto * ext/psych/yaml/yaml_private.h: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44809 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fc4321ea3f
commit
e8132aa4d7
8 changed files with 101 additions and 51 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
Wed Feb 5 04:16:41 2014 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||||
|
|
||||||
|
* ext/psych/yaml/emitter.c: merge libyaml 0.1.5
|
||||||
|
* ext/psych/yaml/loader.c: ditto
|
||||||
|
* ext/psych/yaml/parser.c: ditto
|
||||||
|
* ext/psych/yaml/reader.c: ditto
|
||||||
|
* ext/psych/yaml/scanner.c: ditto
|
||||||
|
* ext/psych/yaml/writer.c: ditto
|
||||||
|
* ext/psych/yaml/yaml_private.h: ditto
|
||||||
|
|
||||||
Tue Feb 4 19:10:29 2014 Koichi Sasada <ko1@atdot.net>
|
Tue Feb 4 19:10:29 2014 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* string.c: use long allocator names instead of numbered
|
* string.c: use long allocator names instead of numbered
|
||||||
|
|
|
@ -221,7 +221,7 @@ yaml_emitter_write_indent(yaml_emitter_t *emitter);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yaml_emitter_write_indicator(yaml_emitter_t *emitter,
|
yaml_emitter_write_indicator(yaml_emitter_t *emitter,
|
||||||
const char *indicator, int need_whitespace,
|
char *indicator, int need_whitespace,
|
||||||
int is_whitespace, int is_indention);
|
int is_whitespace, int is_indention);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -517,7 +517,7 @@ yaml_emitter_emit_stream_start(yaml_emitter_t *emitter,
|
||||||
if (emitter->best_width < 0) {
|
if (emitter->best_width < 0) {
|
||||||
emitter->best_width = INT_MAX;
|
emitter->best_width = INT_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!emitter->line_break) {
|
if (!emitter->line_break) {
|
||||||
emitter->line_break = YAML_LN_BREAK;
|
emitter->line_break = YAML_LN_BREAK;
|
||||||
}
|
}
|
||||||
|
@ -607,7 +607,7 @@ yaml_emitter_emit_document_start(yaml_emitter_t *emitter,
|
||||||
if (!yaml_emitter_write_indent(emitter))
|
if (!yaml_emitter_write_indent(emitter))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->data.document_start.tag_directives.start
|
if (event->data.document_start.tag_directives.start
|
||||||
!= event->data.document_start.tag_directives.end) {
|
!= event->data.document_start.tag_directives.end) {
|
||||||
implicit = 0;
|
implicit = 0;
|
||||||
|
@ -721,7 +721,7 @@ yaml_emitter_emit_document_end(yaml_emitter_t *emitter,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Expect a flow item node.
|
* Expect a flow item node.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1402,7 +1402,7 @@ yaml_emitter_analyze_anchor(yaml_emitter_t *emitter,
|
||||||
{
|
{
|
||||||
size_t anchor_length;
|
size_t anchor_length;
|
||||||
yaml_string_t string;
|
yaml_string_t string;
|
||||||
|
|
||||||
anchor_length = strlen((char *)anchor);
|
anchor_length = strlen((char *)anchor);
|
||||||
STRING_ASSIGN(string, anchor, anchor_length);
|
STRING_ASSIGN(string, anchor, anchor_length);
|
||||||
|
|
||||||
|
@ -1493,7 +1493,7 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
|
||||||
int break_space = 0;
|
int break_space = 0;
|
||||||
int space_break = 0;
|
int space_break = 0;
|
||||||
|
|
||||||
int preceded_by_whitespace = 0;
|
int preceeded_by_whitespace = 0;
|
||||||
int followed_by_whitespace = 0;
|
int followed_by_whitespace = 0;
|
||||||
int previous_space = 0;
|
int previous_space = 0;
|
||||||
int previous_break = 0;
|
int previous_break = 0;
|
||||||
|
@ -1524,7 +1524,7 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
|
||||||
flow_indicators = 1;
|
flow_indicators = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
preceded_by_whitespace = 1;
|
preceeded_by_whitespace = 1;
|
||||||
followed_by_whitespace = IS_BLANKZ_AT(string, WIDTH(string));
|
followed_by_whitespace = IS_BLANKZ_AT(string, WIDTH(string));
|
||||||
|
|
||||||
while (string.pointer != string.end)
|
while (string.pointer != string.end)
|
||||||
|
@ -1570,7 +1570,7 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CHECK(string, '#') && preceded_by_whitespace) {
|
if (CHECK(string, '#') && preceeded_by_whitespace) {
|
||||||
flow_indicators = 1;
|
flow_indicators = 1;
|
||||||
block_indicators = 1;
|
block_indicators = 1;
|
||||||
}
|
}
|
||||||
|
@ -1619,7 +1619,7 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
|
||||||
previous_break = 0;
|
previous_break = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
preceded_by_whitespace = IS_BLANKZ(string);
|
preceeded_by_whitespace = IS_BLANKZ(string);
|
||||||
MOVE(string);
|
MOVE(string);
|
||||||
if (string.pointer != string.end) {
|
if (string.pointer != string.end) {
|
||||||
followed_by_whitespace = IS_BLANKZ_AT(string, WIDTH(string));
|
followed_by_whitespace = IS_BLANKZ_AT(string, WIDTH(string));
|
||||||
|
@ -1784,7 +1784,7 @@ yaml_emitter_write_indent(yaml_emitter_t *emitter)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yaml_emitter_write_indicator(yaml_emitter_t *emitter,
|
yaml_emitter_write_indicator(yaml_emitter_t *emitter,
|
||||||
const char *indicator, int need_whitespace,
|
char *indicator, int need_whitespace,
|
||||||
int is_whitespace, int is_indention)
|
int is_whitespace, int is_indention)
|
||||||
{
|
{
|
||||||
size_t indicator_length;
|
size_t indicator_length;
|
||||||
|
@ -2178,7 +2178,7 @@ yaml_emitter_write_block_scalar_hints(yaml_emitter_t *emitter,
|
||||||
yaml_string_t string)
|
yaml_string_t string)
|
||||||
{
|
{
|
||||||
char indent_hint[2];
|
char indent_hint[2];
|
||||||
const char *chomp_hint = NULL;
|
char *chomp_hint = NULL;
|
||||||
|
|
||||||
if (IS_SPACE(string) || IS_BREAK(string))
|
if (IS_SPACE(string) || IS_BREAK(string))
|
||||||
{
|
{
|
||||||
|
|
|
@ -286,6 +286,8 @@ yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event)
|
||||||
int index;
|
int index;
|
||||||
yaml_char_t *tag = first_event->data.scalar.tag;
|
yaml_char_t *tag = first_event->data.scalar.tag;
|
||||||
|
|
||||||
|
if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error;
|
||||||
|
|
||||||
if (!tag || strcmp((char *)tag, "!") == 0) {
|
if (!tag || strcmp((char *)tag, "!") == 0) {
|
||||||
yaml_free(tag);
|
yaml_free(tag);
|
||||||
tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SCALAR_TAG);
|
tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SCALAR_TAG);
|
||||||
|
@ -329,6 +331,8 @@ yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event)
|
||||||
int index, item_index;
|
int index, item_index;
|
||||||
yaml_char_t *tag = first_event->data.sequence_start.tag;
|
yaml_char_t *tag = first_event->data.sequence_start.tag;
|
||||||
|
|
||||||
|
if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error;
|
||||||
|
|
||||||
if (!tag || strcmp((char *)tag, "!") == 0) {
|
if (!tag || strcmp((char *)tag, "!") == 0) {
|
||||||
yaml_free(tag);
|
yaml_free(tag);
|
||||||
tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG);
|
tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG);
|
||||||
|
@ -351,6 +355,9 @@ yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event)
|
||||||
if (!yaml_parser_parse(parser, &event)) return 0;
|
if (!yaml_parser_parse(parser, &event)) return 0;
|
||||||
|
|
||||||
while (event.type != YAML_SEQUENCE_END_EVENT) {
|
while (event.type != YAML_SEQUENCE_END_EVENT) {
|
||||||
|
if (!STACK_LIMIT(parser,
|
||||||
|
parser->document->nodes.start[index-1].data.sequence.items,
|
||||||
|
INT_MAX-1)) return 0;
|
||||||
item_index = yaml_parser_load_node(parser, &event);
|
item_index = yaml_parser_load_node(parser, &event);
|
||||||
if (!item_index) return 0;
|
if (!item_index) return 0;
|
||||||
if (!PUSH(parser,
|
if (!PUSH(parser,
|
||||||
|
@ -387,6 +394,8 @@ yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event)
|
||||||
yaml_node_pair_t pair;
|
yaml_node_pair_t pair;
|
||||||
yaml_char_t *tag = first_event->data.mapping_start.tag;
|
yaml_char_t *tag = first_event->data.mapping_start.tag;
|
||||||
|
|
||||||
|
if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error;
|
||||||
|
|
||||||
if (!tag || strcmp((char *)tag, "!") == 0) {
|
if (!tag || strcmp((char *)tag, "!") == 0) {
|
||||||
yaml_free(tag);
|
yaml_free(tag);
|
||||||
tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_MAPPING_TAG);
|
tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_MAPPING_TAG);
|
||||||
|
@ -409,6 +418,9 @@ yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event)
|
||||||
if (!yaml_parser_parse(parser, &event)) return 0;
|
if (!yaml_parser_parse(parser, &event)) return 0;
|
||||||
|
|
||||||
while (event.type != YAML_MAPPING_END_EVENT) {
|
while (event.type != YAML_MAPPING_END_EVENT) {
|
||||||
|
if (!STACK_LIMIT(parser,
|
||||||
|
parser->document->nodes.start[index-1].data.mapping.pairs,
|
||||||
|
INT_MAX-1)) return 0;
|
||||||
pair.key = yaml_parser_load_node(parser, &event);
|
pair.key = yaml_parser_load_node(parser, &event);
|
||||||
if (!pair.key) return 0;
|
if (!pair.key) return 0;
|
||||||
if (!yaml_parser_parse(parser, &event)) return 0;
|
if (!yaml_parser_parse(parser, &event)) return 0;
|
||||||
|
|
|
@ -1295,7 +1295,7 @@ yaml_parser_process_directives(yaml_parser_t *parser,
|
||||||
token = PEEK_TOKEN(parser);
|
token = PEEK_TOKEN(parser);
|
||||||
if (!token) goto error;
|
if (!token) goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (default_tag_directive = default_tag_directives;
|
for (default_tag_directive = default_tag_directives;
|
||||||
default_tag_directive->handle; default_tag_directive++) {
|
default_tag_directive->handle; default_tag_directive++) {
|
||||||
if (!yaml_parser_append_tag_directive(parser, *default_tag_directive, 1,
|
if (!yaml_parser_append_tag_directive(parser, *default_tag_directive, 1,
|
||||||
|
|
|
@ -52,7 +52,7 @@ yaml_parser_determine_encoding(yaml_parser_t *parser)
|
||||||
{
|
{
|
||||||
/* Ensure that we had enough bytes in the raw buffer. */
|
/* Ensure that we had enough bytes in the raw buffer. */
|
||||||
|
|
||||||
while (!parser->eof
|
while (!parser->eof
|
||||||
&& parser->raw_buffer.last - parser->raw_buffer.pointer < 3) {
|
&& parser->raw_buffer.last - parser->raw_buffer.pointer < 3) {
|
||||||
if (!yaml_parser_update_raw_buffer(parser)) {
|
if (!yaml_parser_update_raw_buffer(parser)) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -295,7 +295,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
|
||||||
parser->offset, value);
|
parser->offset, value);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YAML_UTF16LE_ENCODING:
|
case YAML_UTF16LE_ENCODING:
|
||||||
case YAML_UTF16BE_ENCODING:
|
case YAML_UTF16BE_ENCODING:
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
|
||||||
*
|
*
|
||||||
* The following formulas are used for decoding
|
* The following formulas are used for decoding
|
||||||
* and encoding characters using surrogate pairs:
|
* and encoding characters using surrogate pairs:
|
||||||
*
|
*
|
||||||
* U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF)
|
* U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF)
|
||||||
* U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF)
|
* U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF)
|
||||||
* W1 = 110110yyyyyyyyyy
|
* W1 = 110110yyyyyyyyyy
|
||||||
|
@ -460,6 +460,10 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parser->offset >= PTRDIFF_MAX)
|
||||||
|
return yaml_parser_set_reader_error(parser, "input is too long",
|
||||||
|
PTRDIFF_MAX, -1);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -615,11 +615,11 @@ yaml_parser_decrease_flow_level(yaml_parser_t *parser);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yaml_parser_roll_indent(yaml_parser_t *parser, int column,
|
yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
|
||||||
int number, yaml_token_type_t type, yaml_mark_t mark);
|
ptrdiff_t number, yaml_token_type_t type, yaml_mark_t mark);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yaml_parser_unroll_indent(yaml_parser_t *parser, int column);
|
yaml_parser_unroll_indent(yaml_parser_t *parser, ptrdiff_t column);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Token fetchers.
|
* Token fetchers.
|
||||||
|
@ -762,7 +762,7 @@ yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fetch the next token from the queue. */
|
/* Fetch the next token from the queue. */
|
||||||
|
|
||||||
*token = DEQUEUE(parser, parser->tokens);
|
*token = DEQUEUE(parser, parser->tokens);
|
||||||
parser->token_available = 0;
|
parser->token_available = 0;
|
||||||
parser->tokens_parsed ++;
|
parser->tokens_parsed ++;
|
||||||
|
@ -1103,7 +1103,7 @@ yaml_parser_save_simple_key(yaml_parser_t *parser)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int required = (!parser->flow_level
|
int required = (!parser->flow_level
|
||||||
&& parser->indent == (int)parser->mark.column);
|
&& parser->indent == (ptrdiff_t)parser->mark.column);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A simple key is required only when it is the first token in the current
|
* A simple key is required only when it is the first token in the current
|
||||||
|
@ -1121,7 +1121,7 @@ yaml_parser_save_simple_key(yaml_parser_t *parser)
|
||||||
yaml_simple_key_t simple_key;
|
yaml_simple_key_t simple_key;
|
||||||
simple_key.possible = 1;
|
simple_key.possible = 1;
|
||||||
simple_key.required = required;
|
simple_key.required = required;
|
||||||
simple_key.token_number =
|
simple_key.token_number =
|
||||||
parser->tokens_parsed + (parser->tokens.tail - parser->tokens.head);
|
parser->tokens_parsed + (parser->tokens.tail - parser->tokens.head);
|
||||||
simple_key.mark = parser->mark;
|
simple_key.mark = parser->mark;
|
||||||
|
|
||||||
|
@ -1176,6 +1176,11 @@ yaml_parser_increase_flow_level(yaml_parser_t *parser)
|
||||||
|
|
||||||
/* Increase the flow level. */
|
/* Increase the flow level. */
|
||||||
|
|
||||||
|
if (parser->flow_level == INT_MAX) {
|
||||||
|
parser->error = YAML_MEMORY_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
parser->flow_level++;
|
parser->flow_level++;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1202,12 +1207,12 @@ yaml_parser_decrease_flow_level(yaml_parser_t *parser)
|
||||||
* Push the current indentation level to the stack and set the new level
|
* Push the current indentation level to the stack and set the new level
|
||||||
* the current column is greater than the indentation level. In this case,
|
* the current column is greater than the indentation level. In this case,
|
||||||
* append or insert the specified token into the token queue.
|
* append or insert the specified token into the token queue.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yaml_parser_roll_indent(yaml_parser_t *parser, int column,
|
yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
|
||||||
int number, yaml_token_type_t type, yaml_mark_t mark)
|
ptrdiff_t number, yaml_token_type_t type, yaml_mark_t mark)
|
||||||
{
|
{
|
||||||
yaml_token_t token;
|
yaml_token_t token;
|
||||||
|
|
||||||
|
@ -1226,6 +1231,11 @@ yaml_parser_roll_indent(yaml_parser_t *parser, int column,
|
||||||
if (!PUSH(parser, parser->indents, parser->indent))
|
if (!PUSH(parser, parser->indents, parser->indent))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (column > INT_MAX) {
|
||||||
|
parser->error = YAML_MEMORY_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
parser->indent = column;
|
parser->indent = column;
|
||||||
|
|
||||||
/* Create a token and insert it into the queue. */
|
/* Create a token and insert it into the queue. */
|
||||||
|
@ -1248,13 +1258,13 @@ yaml_parser_roll_indent(yaml_parser_t *parser, int column,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pop indentation levels from the indents stack until the current level
|
* Pop indentation levels from the indents stack until the current level
|
||||||
* becomes less or equal to the column. For each indentation level, append
|
* becomes less or equal to the column. For each intendation level, append
|
||||||
* the BLOCK-END token.
|
* the BLOCK-END token.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yaml_parser_unroll_indent(yaml_parser_t *parser, int column)
|
yaml_parser_unroll_indent(yaml_parser_t *parser, ptrdiff_t column)
|
||||||
{
|
{
|
||||||
yaml_token_t token;
|
yaml_token_t token;
|
||||||
|
|
||||||
|
@ -1263,7 +1273,7 @@ yaml_parser_unroll_indent(yaml_parser_t *parser, int column)
|
||||||
if (parser->flow_level)
|
if (parser->flow_level)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* Loop through the indentation levels in the stack. */
|
/* Loop through the intendation levels in the stack. */
|
||||||
|
|
||||||
while (parser->indent > column)
|
while (parser->indent > column)
|
||||||
{
|
{
|
||||||
|
@ -1935,7 +1945,7 @@ yaml_parser_scan_to_next_token(yaml_parser_t *parser)
|
||||||
*
|
*
|
||||||
* - in the flow context;
|
* - in the flow context;
|
||||||
* - in the block context, but not at the beginning of the line or
|
* - in the block context, but not at the beginning of the line or
|
||||||
* after '-', '?', or ':' (complex value).
|
* after '-', '?', or ':' (complex value).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!CACHE(parser, 1)) return 0;
|
if (!CACHE(parser, 1)) return 0;
|
||||||
|
@ -2574,7 +2584,7 @@ yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive,
|
||||||
|
|
||||||
/* Resize the string to include the head. */
|
/* Resize the string to include the head. */
|
||||||
|
|
||||||
while (string.end - string.start <= (int)length) {
|
while ((size_t)(string.end - string.start) <= length) {
|
||||||
if (!yaml_string_extend(&string.start, &string.pointer, &string.end)) {
|
if (!yaml_string_extend(&string.start, &string.pointer, &string.end)) {
|
||||||
parser->error = YAML_MEMORY_ERROR;
|
parser->error = YAML_MEMORY_ERROR;
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -2769,15 +2779,15 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
|
||||||
|
|
||||||
if (IS_DIGIT(parser->buffer))
|
if (IS_DIGIT(parser->buffer))
|
||||||
{
|
{
|
||||||
/* Check that the indentation is greater than 0. */
|
/* Check that the intendation is greater than 0. */
|
||||||
|
|
||||||
if (CHECK(parser->buffer, '0')) {
|
if (CHECK(parser->buffer, '0')) {
|
||||||
yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
|
yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
|
||||||
start_mark, "found an indentation indicator equal to 0");
|
start_mark, "found an intendation indicator equal to 0");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the indentation level and eat the indicator. */
|
/* Get the intendation level and eat the indicator. */
|
||||||
|
|
||||||
increment = AS_DIGIT(parser->buffer);
|
increment = AS_DIGIT(parser->buffer);
|
||||||
|
|
||||||
|
@ -2791,7 +2801,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
|
||||||
{
|
{
|
||||||
if (CHECK(parser->buffer, '0')) {
|
if (CHECK(parser->buffer, '0')) {
|
||||||
yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
|
yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
|
||||||
start_mark, "found an indentation indicator equal to 0");
|
start_mark, "found an intendation indicator equal to 0");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2841,7 +2851,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
|
||||||
|
|
||||||
end_mark = parser->mark;
|
end_mark = parser->mark;
|
||||||
|
|
||||||
/* Set the indentation level if it was specified. */
|
/* Set the intendation level if it was specified. */
|
||||||
|
|
||||||
if (increment) {
|
if (increment) {
|
||||||
indent = parser->indent >= 0 ? parser->indent+increment : increment;
|
indent = parser->indent >= 0 ? parser->indent+increment : increment;
|
||||||
|
@ -2907,7 +2917,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
|
||||||
|
|
||||||
if (!READ_LINE(parser, leading_break)) goto error;
|
if (!READ_LINE(parser, leading_break)) goto error;
|
||||||
|
|
||||||
/* Eat the following indentation spaces and line breaks. */
|
/* Eat the following intendation spaces and line breaks. */
|
||||||
|
|
||||||
if (!yaml_parser_scan_block_scalar_breaks(parser,
|
if (!yaml_parser_scan_block_scalar_breaks(parser,
|
||||||
&indent, &trailing_breaks, start_mark, &end_mark)) goto error;
|
&indent, &trailing_breaks, start_mark, &end_mark)) goto error;
|
||||||
|
@ -2942,8 +2952,8 @@ error:
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scan indentation spaces and line breaks for a block scalar. Determine the
|
* Scan intendation spaces and line breaks for a block scalar. Determine the
|
||||||
* indentation level if needed.
|
* intendation level if needed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -2955,11 +2965,11 @@ yaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,
|
||||||
|
|
||||||
*end_mark = parser->mark;
|
*end_mark = parser->mark;
|
||||||
|
|
||||||
/* Eat the indentation spaces and line breaks. */
|
/* Eat the intendation spaces and line breaks. */
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* Eat the indentation spaces. */
|
/* Eat the intendation spaces. */
|
||||||
|
|
||||||
if (!CACHE(parser, 1)) return 0;
|
if (!CACHE(parser, 1)) return 0;
|
||||||
|
|
||||||
|
@ -2972,12 +2982,12 @@ yaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,
|
||||||
if ((int)parser->mark.column > max_indent)
|
if ((int)parser->mark.column > max_indent)
|
||||||
max_indent = (int)parser->mark.column;
|
max_indent = (int)parser->mark.column;
|
||||||
|
|
||||||
/* Check for a tab character messing the indentation. */
|
/* Check for a tab character messing the intendation. */
|
||||||
|
|
||||||
if ((!*indent || (int)parser->mark.column < *indent)
|
if ((!*indent || (int)parser->mark.column < *indent)
|
||||||
&& IS_TAB(parser->buffer)) {
|
&& IS_TAB(parser->buffer)) {
|
||||||
return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
|
return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
|
||||||
start_mark, "found a tab character where an indentation space is expected");
|
start_mark, "found a tab character where an intendation space is expected");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Have we found a non-empty line? */
|
/* Have we found a non-empty line? */
|
||||||
|
@ -3001,7 +3011,7 @@ yaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,
|
||||||
*indent = 1;
|
*indent = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3498,12 +3508,12 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token)
|
||||||
{
|
{
|
||||||
if (IS_BLANK(parser->buffer))
|
if (IS_BLANK(parser->buffer))
|
||||||
{
|
{
|
||||||
/* Check for tab character that abuse indentation. */
|
/* Check for tab character that abuse intendation. */
|
||||||
|
|
||||||
if (leading_blanks && (int)parser->mark.column < indent
|
if (leading_blanks && (int)parser->mark.column < indent
|
||||||
&& IS_TAB(parser->buffer)) {
|
&& IS_TAB(parser->buffer)) {
|
||||||
yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
|
yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
|
||||||
start_mark, "found a tab character that violates indentation");
|
start_mark, "found a tab character that violate intendation");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3536,7 +3546,7 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token)
|
||||||
if (!CACHE(parser, 1)) goto error;
|
if (!CACHE(parser, 1)) goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check indentation level. */
|
/* Check intendation level. */
|
||||||
|
|
||||||
if (!parser->flow_level && (int)parser->mark.column < indent)
|
if (!parser->flow_level && (int)parser->mark.column < indent)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -74,7 +74,7 @@ yaml_emitter_flush(yaml_emitter_t *emitter)
|
||||||
unsigned int value;
|
unsigned int value;
|
||||||
size_t k;
|
size_t k;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See the "reader.c" code for more details on UTF-8 encoding. Note
|
* See the "reader.c" code for more details on UTF-8 encoding. Note
|
||||||
* that we assume that the buffer contains a valid UTF-8 sequence.
|
* that we assume that the buffer contains a valid UTF-8 sequence.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
#ifdef RUBY_EXTCONF_H
|
|
||||||
#include RUBY_EXTCONF_H
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@ -10,6 +7,17 @@
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#include <stdint.h>
|
||||||
|
#else
|
||||||
|
#ifdef _WIN64
|
||||||
|
#define PTRDIFF_MAX _I64_MAX
|
||||||
|
#else
|
||||||
|
#define PTRDIFF_MAX INT_MAX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Memory management.
|
* Memory management.
|
||||||
|
@ -231,9 +239,9 @@ yaml_string_join(
|
||||||
(string).pointer[offset] <= (yaml_char_t) 'f') ? \
|
(string).pointer[offset] <= (yaml_char_t) 'f') ? \
|
||||||
((string).pointer[offset] - (yaml_char_t) 'a' + 10) : \
|
((string).pointer[offset] - (yaml_char_t) 'a' + 10) : \
|
||||||
((string).pointer[offset] - (yaml_char_t) '0'))
|
((string).pointer[offset] - (yaml_char_t) '0'))
|
||||||
|
|
||||||
#define AS_HEX(string) AS_HEX_AT((string),0)
|
#define AS_HEX(string) AS_HEX_AT((string),0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the character is ASCII.
|
* Check if the character is ASCII.
|
||||||
*/
|
*/
|
||||||
|
@ -424,6 +432,12 @@ yaml_queue_extend(void **start, void **head, void **tail, void **end);
|
||||||
#define STACK_EMPTY(context,stack) \
|
#define STACK_EMPTY(context,stack) \
|
||||||
((stack).start == (stack).top)
|
((stack).start == (stack).top)
|
||||||
|
|
||||||
|
#define STACK_LIMIT(context,stack,size) \
|
||||||
|
((stack).top - (stack).start < (size) ? \
|
||||||
|
1 : \
|
||||||
|
((context)->error = YAML_MEMORY_ERROR, \
|
||||||
|
0))
|
||||||
|
|
||||||
#define PUSH(context,stack,value) \
|
#define PUSH(context,stack,value) \
|
||||||
(((stack).top != (stack).end \
|
(((stack).top != (stack).end \
|
||||||
|| yaml_stack_extend((void **)&(stack).start, \
|
|| yaml_stack_extend((void **)&(stack).start, \
|
||||||
|
|
Loading…
Reference in a new issue