*/
static int
-yaml_parser_roll_indent(yaml_parser_t *parser, int column,
- int number, yaml_token_type_t type, yaml_mark_t mark);
+yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
+ ptrdiff_t number, yaml_token_type_t type, yaml_mark_t mark);
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.
if (simple_key->required) {
return yaml_parser_set_scanner_error(parser,
"while scanning a simple key", simple_key->mark,
- "could not found expected ':'");
+ "could not find expected ':'");
}
simple_key->possible = 0;
*/
int required = (!parser->flow_level
- && parser->indent == (int)parser->mark.column);
-
- /*
- * A simple key is required only when it is the first token in the current
- * line. Therefore it is always allowed. But we add a check anyway.
- */
-
- assert(parser->simple_key_allowed || !required); /* Impossible. */
+ && parser->indent == (ptrdiff_t)parser->mark.column);
/*
* If the current position may start a simple key, save it.
if (parser->simple_key_allowed)
{
- yaml_simple_key_t simple_key = { 1, required,
- parser->tokens_parsed + parser->tokens.tail - parser->tokens.head,
- { 0, 0, 0 } };
+ yaml_simple_key_t simple_key;
+ simple_key.possible = 1;
+ simple_key.required = required;
+ simple_key.token_number =
+ parser->tokens_parsed + (parser->tokens.tail - parser->tokens.head);
simple_key.mark = parser->mark;
if (!yaml_parser_remove_simple_key(parser)) return 0;
if (simple_key->required) {
return yaml_parser_set_scanner_error(parser,
"while scanning a simple key", simple_key->mark,
- "could not found expected ':'");
+ "could not find expected ':'");
}
}
/* Increase the flow level. */
+ if (parser->flow_level == INT_MAX) {
+ parser->error = YAML_MEMORY_ERROR;
+ return 0;
+ }
+
parser->flow_level++;
return 1;
*/
static int
-yaml_parser_roll_indent(yaml_parser_t *parser, int column,
- int number, yaml_token_type_t type, yaml_mark_t mark)
+yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
+ ptrdiff_t number, yaml_token_type_t type, yaml_mark_t mark)
{
yaml_token_t token;
if (!PUSH(parser, parser->indents, parser->indent))
return 0;
+ if (column > INT_MAX) {
+ parser->error = YAML_MEMORY_ERROR;
+ return 0;
+ }
+
parser->indent = column;
/* Create a token and insert it into the queue. */
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;
if (!IS_BREAKZ(parser->buffer)) {
yaml_parser_set_scanner_error(parser, "while scanning a directive",
- start_mark, "did not found expected comment or line break");
+ start_mark, "did not find expected comment or line break");
goto error;
}
if (string.start == string.pointer) {
yaml_parser_set_scanner_error(parser, "while scanning a directive",
- start_mark, "cannot found expected directive name");
+ start_mark, "could not find expected directive name");
goto error;
}
if (!IS_BLANKZ(parser->buffer)) {
yaml_parser_set_scanner_error(parser, "while scanning a tag",
- start_mark, "did not found expected whitespace or line break");
+ start_mark, "did not find expected whitespace or line break");
goto error;
}
/* 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)) {
parser->error = YAML_MEMORY_ERROR;
goto error;
/* Check if it is a URI-escape sequence. */
if (CHECK(parser->buffer, '%')) {
+ if (!STRING_EXTEND(parser, string))
+ goto error;
+
if (!yaml_parser_scan_uri_escapes(parser,
directive, start_mark, &string)) goto error;
}
if (!IS_BREAKZ(parser->buffer)) {
yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
- start_mark, "did not found expected comment or line break");
+ start_mark, "did not find expected comment or line break");
goto error;
}
*(string.pointer++) = '"';
break;
+ case '/':
+ *(string.pointer++) = '/';
+ break;
+
case '\'':
*(string.pointer++) = '\'';
break;