| 1080 | } |
| 1081 | |
| 1082 | static int yaml_doc_init(yaml_doc_t *doc, const char *data, size_t len) { |
| 1083 | memset(doc, 0, sizeof(*doc)); |
| 1084 | doc->data = data; |
| 1085 | doc->len = len; |
| 1086 | if (yaml_build_lines(doc) != 0) { |
| 1087 | return YAML_ERROR; |
| 1088 | } |
| 1089 | for (size_t i = 0; i < doc->line_count; i++) { |
| 1090 | const yaml_line_t *line = &doc->lines[i]; |
| 1091 | if (line->indent == 0U && !line->blank && !line->comment) { |
| 1092 | size_t len_no_eol = line->text_end - line->start; |
| 1093 | if ((len_no_eol == YAML_DOC_MARKER_LEN && |
| 1094 | memcmp(doc->data + line->start, "---", YAML_DOC_MARKER_LEN) == 0) || |
| 1095 | (len_no_eol == YAML_DOC_MARKER_LEN && |
| 1096 | memcmp(doc->data + line->start, "...", YAML_DOC_MARKER_LEN) == 0)) { |
| 1097 | yaml_doc_free(doc); |
| 1098 | return YAML_ERROR; |
| 1099 | } |
| 1100 | } |
| 1101 | } |
| 1102 | if (yaml_validate_root_mapping(doc) != 0) { |
| 1103 | yaml_doc_free(doc); |
| 1104 | return YAML_ERROR; |
| 1105 | } |
| 1106 | return 0; |
| 1107 | } |
| 1108 | |
| 1109 | static size_t yaml_skip_spaces(const char *data, size_t pos, size_t end) { |
| 1110 | while (pos < end && data[pos] == ' ') { |
no test coverage detected