Coverage Report

Created: 2023-06-07 06:05

/src/libyaml_deconstructor_alt_fuzzer.c
Line
Count
Source (jump to first uncovered line)
1
// Copyright 2020 Google LLC
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//      http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include "yaml.h"
16
#include "yaml_write_handler.h"
17
#include <assert.h>
18
#include <stdbool.h>
19
#include <stdint.h>
20
#include <stdio.h>
21
#include <stdlib.h>
22
#include <string.h>
23
24
#ifdef NDEBUG
25
#undef NDEBUG
26
#endif
27
28
8.95k
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
29
8.95k
  if (size < 2)
30
1
    return 0;
31
32
8.94k
  bool done = false;
33
8.94k
  bool is_canonical = data[0] & 1;
34
8.94k
  bool is_unicode = data[1] & 1;
35
8.94k
  data += 2;
36
8.94k
  size -= 2;
37
38
8.94k
  yaml_parser_t parser;
39
8.94k
  yaml_emitter_t emitter;
40
8.94k
  yaml_event_t input_event;
41
8.94k
  yaml_document_t output_document;
42
43
8.94k
  int root;
44
45
  /* Initialize the parser and emitter objects. */
46
47
8.94k
  if (!yaml_parser_initialize(&parser)) {
48
0
    return 1;
49
0
  }
50
51
8.94k
  if (!yaml_emitter_initialize(&emitter)) {
52
0
    yaml_parser_delete(&parser);
53
0
    return 1;
54
0
  }
55
56
  /* Set the parser parameters. */
57
58
8.94k
  yaml_parser_set_input_string(&parser, data, size);
59
60
  /* Set the emitter parameters. */
61
8.94k
  yaml_output_buffer_t out = {/*buf=*/NULL, /*size=*/0};
62
8.94k
  yaml_emitter_set_output(&emitter, yaml_write_handler, &out);
63
64
8.94k
  yaml_emitter_set_canonical(&emitter, is_canonical);
65
8.94k
  yaml_emitter_set_unicode(&emitter, is_unicode);
66
67
  /* Create and emit the STREAM-START event. */
68
69
8.94k
  if (!yaml_emitter_open(&emitter))
70
0
    goto error;
71
72
  /* Create a output_document object. */
73
74
8.94k
  if (!yaml_document_initialize(&output_document, NULL, NULL, NULL, 0, 0))
75
0
    goto error;
76
77
  /* Create the root sequence. */
78
79
8.94k
  root = yaml_document_add_sequence(&output_document, NULL,
80
8.94k
                                    YAML_BLOCK_SEQUENCE_STYLE);
81
8.94k
  if (!root)
82
0
    goto error;
83
84
  /* Loop through the input events. */
85
86
27.9M
  while (!done) {
87
27.9M
    int properties, key, value, map, seq;
88
89
    /* Get the next event. */
90
91
27.9M
    if (!yaml_parser_parse(&parser, &input_event))
92
4.62k
      goto error;
93
94
    /* Check if this is the stream end. */
95
96
27.9M
    done = (input_event.type == YAML_STREAM_END_EVENT);
97
98
    /* Create a mapping node and attach it to the root sequence. */
99
100
27.9M
    properties = yaml_document_add_mapping(&output_document, NULL,
101
27.9M
                                           YAML_BLOCK_MAPPING_STYLE);
102
27.9M
    if (!properties)
103
0
      goto error;
104
27.9M
    if (!yaml_document_append_sequence_item(&output_document, root, properties))
105
0
      goto error;
106
107
    /* Analyze the event. */
108
109
27.9M
    switch (input_event.type) {
110
8.81k
    case YAML_STREAM_START_EVENT:
111
112
      /* Add 'type': 'STREAM-START'. */
113
114
8.81k
      key = yaml_document_add_scalar(&output_document, NULL,
115
8.81k
                                     (yaml_char_t *)"type", -1,
116
8.81k
                                     YAML_PLAIN_SCALAR_STYLE);
117
8.81k
      if (!key)
118
0
        goto error;
119
8.81k
      value = yaml_document_add_scalar(&output_document, NULL,
120
8.81k
                                       (yaml_char_t *)"STREAM-START", -1,
121
8.81k
                                       YAML_PLAIN_SCALAR_STYLE);
122
8.81k
      if (!value)
123
0
        goto error;
124
8.81k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
125
8.81k
                                             value))
126
0
        goto error;
127
128
      /* Add 'encoding': <encoding>. */
129
130
8.81k
      if (input_event.data.stream_start.encoding) {
131
8.81k
        yaml_encoding_t encoding = input_event.data.stream_start.encoding;
132
133
8.81k
        key = yaml_document_add_scalar(&output_document, NULL,
134
8.81k
                                       (yaml_char_t *)"encoding", -1,
135
8.81k
                                       YAML_PLAIN_SCALAR_STYLE);
136
8.81k
        if (!key)
137
0
          goto error;
138
8.81k
        value = yaml_document_add_scalar(
139
8.81k
            &output_document, NULL,
140
8.81k
            (encoding == YAML_UTF8_ENCODING
141
8.81k
                 ? (yaml_char_t *)"utf-8"
142
8.81k
                 : encoding == YAML_UTF16LE_ENCODING
143
397
                       ? (yaml_char_t *)"utf-16-le"
144
397
                       : encoding == YAML_UTF16BE_ENCODING
145
301
                             ? (yaml_char_t *)"utf-16-be"
146
301
                             : (yaml_char_t *)"unknown"),
147
8.81k
            -1, YAML_PLAIN_SCALAR_STYLE);
148
8.81k
        if (!value)
149
0
          goto error;
150
8.81k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
151
8.81k
                                               key, value))
152
0
          goto error;
153
8.81k
      }
154
155
8.81k
      break;
156
157
8.81k
    case YAML_STREAM_END_EVENT:
158
159
      /* Add 'type': 'STREAM-END'. */
160
161
4.29k
      key = yaml_document_add_scalar(&output_document, NULL,
162
4.29k
                                     (yaml_char_t *)"type", -1,
163
4.29k
                                     YAML_PLAIN_SCALAR_STYLE);
164
4.29k
      if (!key)
165
0
        goto error;
166
4.29k
      value = yaml_document_add_scalar(&output_document, NULL,
167
4.29k
                                       (yaml_char_t *)"STREAM-END", -1,
168
4.29k
                                       YAML_PLAIN_SCALAR_STYLE);
169
4.29k
      if (!value)
170
0
        goto error;
171
4.29k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
172
4.29k
                                             value))
173
0
        goto error;
174
175
4.29k
      break;
176
177
828k
    case YAML_DOCUMENT_START_EVENT:
178
179
      /* Add 'type': 'DOCUMENT-START'. */
180
181
828k
      key = yaml_document_add_scalar(&output_document, NULL,
182
828k
                                     (yaml_char_t *)"type", -1,
183
828k
                                     YAML_PLAIN_SCALAR_STYLE);
184
828k
      if (!key)
185
0
        goto error;
186
828k
      value = yaml_document_add_scalar(&output_document, NULL,
187
828k
                                       (yaml_char_t *)"DOCUMENT-START", -1,
188
828k
                                       YAML_PLAIN_SCALAR_STYLE);
189
828k
      if (!value)
190
0
        goto error;
191
828k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
192
828k
                                             value))
193
0
        goto error;
194
195
      /* Display the output_document version numbers. */
196
197
828k
      if (input_event.data.document_start.version_directive) {
198
4.34k
        yaml_version_directive_t *version =
199
4.34k
            input_event.data.document_start.version_directive;
200
4.34k
        char number[64];
201
202
        /* Add 'version': {}. */
203
204
4.34k
        key = yaml_document_add_scalar(&output_document, NULL,
205
4.34k
                                       (yaml_char_t *)"version", -1,
206
4.34k
                                       YAML_PLAIN_SCALAR_STYLE);
207
4.34k
        if (!key)
208
0
          goto error;
209
4.34k
        map = yaml_document_add_mapping(&output_document, NULL,
210
4.34k
                                        YAML_FLOW_MAPPING_STYLE);
211
4.34k
        if (!map)
212
0
          goto error;
213
4.34k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
214
4.34k
                                               key, map))
215
0
          goto error;
216
217
        /* Add 'major': <number>. */
218
219
4.34k
        key = yaml_document_add_scalar(&output_document, NULL,
220
4.34k
                                       (yaml_char_t *)"major", -1,
221
4.34k
                                       YAML_PLAIN_SCALAR_STYLE);
222
4.34k
        if (!key)
223
0
          goto error;
224
4.34k
        sprintf(number, "%d", version->major);
225
4.34k
        value = yaml_document_add_scalar(
226
4.34k
            &output_document, (yaml_char_t *)YAML_INT_TAG,
227
4.34k
            (yaml_char_t *)number, -1, YAML_PLAIN_SCALAR_STYLE);
228
4.34k
        if (!value)
229
0
          goto error;
230
4.34k
        if (!yaml_document_append_mapping_pair(&output_document, map, key,
231
4.34k
                                               value))
232
0
          goto error;
233
234
        /* Add 'minor': <number>. */
235
236
4.34k
        key = yaml_document_add_scalar(&output_document, NULL,
237
4.34k
                                       (yaml_char_t *)"minor", -1,
238
4.34k
                                       YAML_PLAIN_SCALAR_STYLE);
239
4.34k
        if (!key)
240
0
          goto error;
241
4.34k
        sprintf(number, "%d", version->minor);
242
4.34k
        value = yaml_document_add_scalar(
243
4.34k
            &output_document, (yaml_char_t *)YAML_INT_TAG,
244
4.34k
            (yaml_char_t *)number, -1, YAML_PLAIN_SCALAR_STYLE);
245
4.34k
        if (!value)
246
0
          goto error;
247
4.34k
        if (!yaml_document_append_mapping_pair(&output_document, map, key,
248
4.34k
                                               value))
249
0
          goto error;
250
4.34k
      }
251
252
      /* Display the output_document tag directives. */
253
254
828k
      if (input_event.data.document_start.tag_directives.start !=
255
828k
          input_event.data.document_start.tag_directives.end) {
256
17.3k
        yaml_tag_directive_t *tag;
257
258
        /* Add 'tags': []. */
259
260
17.3k
        key = yaml_document_add_scalar(&output_document, NULL,
261
17.3k
                                       (yaml_char_t *)"tags", -1,
262
17.3k
                                       YAML_PLAIN_SCALAR_STYLE);
263
17.3k
        if (!key)
264
0
          goto error;
265
17.3k
        seq = yaml_document_add_sequence(&output_document, NULL,
266
17.3k
                                         YAML_BLOCK_SEQUENCE_STYLE);
267
17.3k
        if (!seq)
268
0
          goto error;
269
17.3k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
270
17.3k
                                               key, seq))
271
0
          goto error;
272
273
17.3k
        for (tag = input_event.data.document_start.tag_directives.start;
274
37.7k
             tag != input_event.data.document_start.tag_directives.end; tag++) {
275
          /* Add {}. */
276
277
20.4k
          map = yaml_document_add_mapping(&output_document, NULL,
278
20.4k
                                          YAML_FLOW_MAPPING_STYLE);
279
20.4k
          if (!map)
280
0
            goto error;
281
20.4k
          if (!yaml_document_append_sequence_item(&output_document, seq, map))
282
0
            goto error;
283
284
          /* Add 'handle': <handle>. */
285
286
20.4k
          key = yaml_document_add_scalar(&output_document, NULL,
287
20.4k
                                         (yaml_char_t *)"handle", -1,
288
20.4k
                                         YAML_PLAIN_SCALAR_STYLE);
289
20.4k
          if (!key)
290
0
            goto error;
291
20.4k
          value = yaml_document_add_scalar(&output_document, NULL, tag->handle,
292
20.4k
                                           -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
293
20.4k
          if (!value)
294
0
            goto error;
295
20.4k
          if (!yaml_document_append_mapping_pair(&output_document, map, key,
296
20.4k
                                                 value))
297
0
            goto error;
298
299
          /* Add 'prefix': <prefix>. */
300
301
20.4k
          key = yaml_document_add_scalar(&output_document, NULL,
302
20.4k
                                         (yaml_char_t *)"prefix", -1,
303
20.4k
                                         YAML_PLAIN_SCALAR_STYLE);
304
20.4k
          if (!key)
305
0
            goto error;
306
20.4k
          value = yaml_document_add_scalar(&output_document, NULL, tag->prefix,
307
20.4k
                                           -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
308
20.4k
          if (!value)
309
1
            goto error;
310
20.4k
          if (!yaml_document_append_mapping_pair(&output_document, map, key,
311
20.4k
                                                 value))
312
0
            goto error;
313
20.4k
        }
314
17.3k
      }
315
316
      /* Add 'implicit': <flag>. */
317
318
828k
      key = yaml_document_add_scalar(&output_document, NULL,
319
828k
                                     (yaml_char_t *)"implicit", -1,
320
828k
                                     YAML_PLAIN_SCALAR_STYLE);
321
828k
      if (!key)
322
0
        goto error;
323
828k
      value = yaml_document_add_scalar(
324
828k
          &output_document, (yaml_char_t *)YAML_BOOL_TAG,
325
828k
          (input_event.data.document_start.implicit ? (yaml_char_t *)"true"
326
828k
                                                    : (yaml_char_t *)"false"),
327
828k
          -1, YAML_PLAIN_SCALAR_STYLE);
328
828k
      if (!value)
329
0
        goto error;
330
828k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
331
828k
                                             value))
332
0
        goto error;
333
334
828k
      break;
335
336
828k
    case YAML_DOCUMENT_END_EVENT:
337
338
      /* Add 'type': 'DOCUMENT-END'. */
339
340
826k
      key = yaml_document_add_scalar(&output_document, NULL,
341
826k
                                     (yaml_char_t *)"type", -1,
342
826k
                                     YAML_PLAIN_SCALAR_STYLE);
343
826k
      if (!key)
344
0
        goto error;
345
826k
      value = yaml_document_add_scalar(&output_document, NULL,
346
826k
                                       (yaml_char_t *)"DOCUMENT-END", -1,
347
826k
                                       YAML_PLAIN_SCALAR_STYLE);
348
826k
      if (!value)
349
0
        goto error;
350
826k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
351
826k
                                             value))
352
0
        goto error;
353
354
      /* Add 'implicit': <flag>. */
355
356
826k
      key = yaml_document_add_scalar(&output_document, NULL,
357
826k
                                     (yaml_char_t *)"implicit", -1,
358
826k
                                     YAML_PLAIN_SCALAR_STYLE);
359
826k
      if (!key)
360
0
        goto error;
361
826k
      value = yaml_document_add_scalar(
362
826k
          &output_document, (yaml_char_t *)YAML_BOOL_TAG,
363
826k
          (input_event.data.document_end.implicit ? (yaml_char_t *)"true"
364
826k
                                                  : (yaml_char_t *)"false"),
365
826k
          -1, YAML_PLAIN_SCALAR_STYLE);
366
826k
      if (!value)
367
0
        goto error;
368
826k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
369
826k
                                             value))
370
0
        goto error;
371
372
826k
      break;
373
374
826k
    case YAML_ALIAS_EVENT:
375
376
      /* Add 'type': 'ALIAS'. */
377
378
18.0k
      key = yaml_document_add_scalar(&output_document, NULL,
379
18.0k
                                     (yaml_char_t *)"type", -1,
380
18.0k
                                     YAML_PLAIN_SCALAR_STYLE);
381
18.0k
      if (!key)
382
0
        goto error;
383
18.0k
      value = yaml_document_add_scalar(&output_document, NULL,
384
18.0k
                                       (yaml_char_t *)"ALIAS", -1,
385
18.0k
                                       YAML_PLAIN_SCALAR_STYLE);
386
18.0k
      if (!value)
387
0
        goto error;
388
18.0k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
389
18.0k
                                             value))
390
0
        goto error;
391
392
      /* Add 'anchor': <anchor>. */
393
394
18.0k
      key = yaml_document_add_scalar(&output_document, NULL,
395
18.0k
                                     (yaml_char_t *)"anchor", -1,
396
18.0k
                                     YAML_PLAIN_SCALAR_STYLE);
397
18.0k
      if (!key)
398
0
        goto error;
399
18.0k
      value = yaml_document_add_scalar(&output_document, NULL,
400
18.0k
                                       input_event.data.alias.anchor, -1,
401
18.0k
                                       YAML_DOUBLE_QUOTED_SCALAR_STYLE);
402
18.0k
      if (!value)
403
0
        goto error;
404
18.0k
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
405
18.0k
                                             value))
406
0
        goto error;
407
408
18.0k
      break;
409
410
14.0M
    case YAML_SCALAR_EVENT:
411
412
      /* Add 'type': 'SCALAR'. */
413
414
14.0M
      key = yaml_document_add_scalar(&output_document, NULL,
415
14.0M
                                     (yaml_char_t *)"type", -1,
416
14.0M
                                     YAML_PLAIN_SCALAR_STYLE);
417
14.0M
      if (!key)
418
0
        goto error;
419
14.0M
      value = yaml_document_add_scalar(&output_document, NULL,
420
14.0M
                                       (yaml_char_t *)"SCALAR", -1,
421
14.0M
                                       YAML_PLAIN_SCALAR_STYLE);
422
14.0M
      if (!value)
423
0
        goto error;
424
14.0M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
425
14.0M
                                             value))
426
0
        goto error;
427
428
      /* Add 'anchor': <anchor>. */
429
430
14.0M
      if (input_event.data.scalar.anchor) {
431
20.6k
        key = yaml_document_add_scalar(&output_document, NULL,
432
20.6k
                                       (yaml_char_t *)"anchor", -1,
433
20.6k
                                       YAML_PLAIN_SCALAR_STYLE);
434
20.6k
        if (!key)
435
0
          goto error;
436
20.6k
        value = yaml_document_add_scalar(&output_document, NULL,
437
20.6k
                                         input_event.data.scalar.anchor, -1,
438
20.6k
                                         YAML_DOUBLE_QUOTED_SCALAR_STYLE);
439
20.6k
        if (!value)
440
0
          goto error;
441
20.6k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
442
20.6k
                                               key, value))
443
0
          goto error;
444
20.6k
      }
445
446
      /* Add 'tag': <tag>. */
447
448
14.0M
      if (input_event.data.scalar.tag) {
449
165k
        key = yaml_document_add_scalar(&output_document, NULL,
450
165k
                                       (yaml_char_t *)"tag", -1,
451
165k
                                       YAML_PLAIN_SCALAR_STYLE);
452
165k
        if (!key)
453
0
          goto error;
454
165k
        value = yaml_document_add_scalar(&output_document, NULL,
455
165k
                                         input_event.data.scalar.tag, -1,
456
165k
                                         YAML_DOUBLE_QUOTED_SCALAR_STYLE);
457
165k
        if (!value)
458
20
          goto error;
459
165k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
460
165k
                                               key, value))
461
0
          goto error;
462
165k
      }
463
464
      /* Add 'value': <value>. */
465
466
14.0M
      key = yaml_document_add_scalar(&output_document, NULL,
467
14.0M
                                     (yaml_char_t *)"value", -1,
468
14.0M
                                     YAML_PLAIN_SCALAR_STYLE);
469
14.0M
      if (!key)
470
0
        goto error;
471
14.0M
      value = yaml_document_add_scalar(
472
14.0M
          &output_document, NULL, input_event.data.scalar.value,
473
14.0M
          input_event.data.scalar.length, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
474
14.0M
      if (!value)
475
0
        goto error;
476
14.0M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
477
14.0M
                                             value))
478
0
        goto error;
479
480
      /* Display if the scalar tag is implicit. */
481
482
      /* Add 'implicit': {} */
483
484
14.0M
      key = yaml_document_add_scalar(&output_document, NULL,
485
14.0M
                                     (yaml_char_t *)"version", -1,
486
14.0M
                                     YAML_PLAIN_SCALAR_STYLE);
487
14.0M
      if (!key)
488
0
        goto error;
489
14.0M
      map = yaml_document_add_mapping(&output_document, NULL,
490
14.0M
                                      YAML_FLOW_MAPPING_STYLE);
491
14.0M
      if (!map)
492
0
        goto error;
493
14.0M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
494
14.0M
                                             map))
495
0
        goto error;
496
497
      /* Add 'plain': <flag>. */
498
499
14.0M
      key = yaml_document_add_scalar(&output_document, NULL,
500
14.0M
                                     (yaml_char_t *)"plain", -1,
501
14.0M
                                     YAML_PLAIN_SCALAR_STYLE);
502
14.0M
      if (!key)
503
0
        goto error;
504
14.0M
      value = yaml_document_add_scalar(
505
14.0M
          &output_document, (yaml_char_t *)YAML_BOOL_TAG,
506
14.0M
          (input_event.data.scalar.plain_implicit ? (yaml_char_t *)"true"
507
14.0M
                                                  : (yaml_char_t *)"false"),
508
14.0M
          -1, YAML_PLAIN_SCALAR_STYLE);
509
14.0M
      if (!value)
510
0
        goto error;
511
14.0M
      if (!yaml_document_append_mapping_pair(&output_document, map, key, value))
512
0
        goto error;
513
514
      /* Add 'quoted': <flag>. */
515
516
14.0M
      key = yaml_document_add_scalar(&output_document, NULL,
517
14.0M
                                     (yaml_char_t *)"quoted", -1,
518
14.0M
                                     YAML_PLAIN_SCALAR_STYLE);
519
14.0M
      if (!key)
520
0
        goto error;
521
14.0M
      value = yaml_document_add_scalar(
522
14.0M
          &output_document, (yaml_char_t *)YAML_BOOL_TAG,
523
14.0M
          (input_event.data.scalar.quoted_implicit ? (yaml_char_t *)"true"
524
14.0M
                                                   : (yaml_char_t *)"false"),
525
14.0M
          -1, YAML_PLAIN_SCALAR_STYLE);
526
14.0M
      if (!value)
527
0
        goto error;
528
14.0M
      if (!yaml_document_append_mapping_pair(&output_document, map, key, value))
529
0
        goto error;
530
531
      /* Display the style information. */
532
533
14.0M
      if (input_event.data.scalar.style) {
534
14.0M
        yaml_scalar_style_t style = input_event.data.scalar.style;
535
536
        /* Add 'style': <style>. */
537
538
14.0M
        key = yaml_document_add_scalar(&output_document, NULL,
539
14.0M
                                       (yaml_char_t *)"style", -1,
540
14.0M
                                       YAML_PLAIN_SCALAR_STYLE);
541
14.0M
        if (!key)
542
0
          goto error;
543
14.0M
        value = yaml_document_add_scalar(
544
14.0M
            &output_document, NULL,
545
14.0M
            (yaml_char_t
546
14.0M
                 *)(style == YAML_PLAIN_SCALAR_STYLE
547
14.0M
                        ? "plain"
548
14.0M
                        : style == YAML_SINGLE_QUOTED_SCALAR_STYLE
549
35.9k
                              ? "single-quoted"
550
35.9k
                              : style == YAML_DOUBLE_QUOTED_SCALAR_STYLE
551
33.4k
                                    ? "double-quoted"
552
33.4k
                                    : style == YAML_LITERAL_SCALAR_STYLE
553
31.1k
                                          ? "literal"
554
31.1k
                                          : style == YAML_FOLDED_SCALAR_STYLE
555
10.6k
                                                ? "folded"
556
10.6k
                                                : "unknown"),
557
14.0M
            -1, YAML_PLAIN_SCALAR_STYLE);
558
14.0M
        if (!value)
559
0
          goto error;
560
14.0M
        if (!yaml_document_append_mapping_pair(&output_document, properties,
561
14.0M
                                               key, value))
562
0
          goto error;
563
14.0M
      }
564
565
14.0M
      break;
566
567
14.0M
    case YAML_SEQUENCE_START_EVENT:
568
569
      /* Add 'type': 'SEQUENCE-START'. */
570
571
1.85M
      key = yaml_document_add_scalar(&output_document, NULL,
572
1.85M
                                     (yaml_char_t *)"type", -1,
573
1.85M
                                     YAML_PLAIN_SCALAR_STYLE);
574
1.85M
      if (!key)
575
0
        goto error;
576
1.85M
      value = yaml_document_add_scalar(&output_document, NULL,
577
1.85M
                                       (yaml_char_t *)"SEQUENCE-START", -1,
578
1.85M
                                       YAML_PLAIN_SCALAR_STYLE);
579
1.85M
      if (!value)
580
0
        goto error;
581
1.85M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
582
1.85M
                                             value))
583
0
        goto error;
584
585
      /* Add 'anchor': <anchor>. */
586
587
1.85M
      if (input_event.data.sequence_start.anchor) {
588
1.16k
        key = yaml_document_add_scalar(&output_document, NULL,
589
1.16k
                                       (yaml_char_t *)"anchor", -1,
590
1.16k
                                       YAML_PLAIN_SCALAR_STYLE);
591
1.16k
        if (!key)
592
0
          goto error;
593
1.16k
        value = yaml_document_add_scalar(&output_document, NULL,
594
1.16k
                                         input_event.data.sequence_start.anchor,
595
1.16k
                                         -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
596
1.16k
        if (!value)
597
0
          goto error;
598
1.16k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
599
1.16k
                                               key, value))
600
0
          goto error;
601
1.16k
      }
602
603
      /* Add 'tag': <tag>. */
604
605
1.85M
      if (input_event.data.sequence_start.tag) {
606
3.71k
        key = yaml_document_add_scalar(&output_document, NULL,
607
3.71k
                                       (yaml_char_t *)"tag", -1,
608
3.71k
                                       YAML_PLAIN_SCALAR_STYLE);
609
3.71k
        if (!key)
610
0
          goto error;
611
3.71k
        value = yaml_document_add_scalar(&output_document, NULL,
612
3.71k
                                         input_event.data.sequence_start.tag,
613
3.71k
                                         -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
614
3.71k
        if (!value)
615
1
          goto error;
616
3.70k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
617
3.70k
                                               key, value))
618
0
          goto error;
619
3.70k
      }
620
621
      /* Add 'implicit': <flag>. */
622
623
1.85M
      key = yaml_document_add_scalar(&output_document, NULL,
624
1.85M
                                     (yaml_char_t *)"implicit", -1,
625
1.85M
                                     YAML_PLAIN_SCALAR_STYLE);
626
1.85M
      if (!key)
627
0
        goto error;
628
1.85M
      value = yaml_document_add_scalar(
629
1.85M
          &output_document, (yaml_char_t *)YAML_BOOL_TAG,
630
1.85M
          (input_event.data.sequence_start.implicit ? (yaml_char_t *)"true"
631
1.85M
                                                    : (yaml_char_t *)"false"),
632
1.85M
          -1, YAML_PLAIN_SCALAR_STYLE);
633
1.85M
      if (!value)
634
0
        goto error;
635
1.85M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
636
1.85M
                                             value))
637
0
        goto error;
638
639
      /* Display the style information. */
640
641
1.85M
      if (input_event.data.sequence_start.style) {
642
1.85M
        yaml_sequence_style_t style = input_event.data.sequence_start.style;
643
644
        /* Add 'style': <style>. */
645
646
1.85M
        key = yaml_document_add_scalar(&output_document, NULL,
647
1.85M
                                       (yaml_char_t *)"style", -1,
648
1.85M
                                       YAML_PLAIN_SCALAR_STYLE);
649
1.85M
        if (!key)
650
0
          goto error;
651
1.85M
        value = yaml_document_add_scalar(
652
1.85M
            &output_document, NULL,
653
1.85M
            (yaml_char_t *)(style == YAML_BLOCK_SEQUENCE_STYLE
654
1.85M
                                ? "block"
655
1.85M
                                : style == YAML_FLOW_SEQUENCE_STYLE
656
141k
                                      ? "flow"
657
141k
                                      : "unknown"),
658
1.85M
            -1, YAML_PLAIN_SCALAR_STYLE);
659
1.85M
        if (!value)
660
0
          goto error;
661
1.85M
        if (!yaml_document_append_mapping_pair(&output_document, properties,
662
1.85M
                                               key, value))
663
0
          goto error;
664
1.85M
      }
665
666
1.85M
      break;
667
668
1.85M
    case YAML_SEQUENCE_END_EVENT:
669
670
      /* Add 'type': 'SEQUENCE-END'. */
671
672
1.60M
      key = yaml_document_add_scalar(&output_document, NULL,
673
1.60M
                                     (yaml_char_t *)"type", -1,
674
1.60M
                                     YAML_PLAIN_SCALAR_STYLE);
675
1.60M
      if (!key)
676
0
        goto error;
677
1.60M
      value = yaml_document_add_scalar(&output_document, NULL,
678
1.60M
                                       (yaml_char_t *)"SEQUENCE-END", -1,
679
1.60M
                                       YAML_PLAIN_SCALAR_STYLE);
680
1.60M
      if (!value)
681
0
        goto error;
682
1.60M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
683
1.60M
                                             value))
684
0
        goto error;
685
686
1.60M
      break;
687
688
4.42M
    case YAML_MAPPING_START_EVENT:
689
690
      /* Add 'type': 'MAPPING-START'. */
691
692
4.42M
      key = yaml_document_add_scalar(&output_document, NULL,
693
4.42M
                                     (yaml_char_t *)"type", -1,
694
4.42M
                                     YAML_PLAIN_SCALAR_STYLE);
695
4.42M
      if (!key)
696
0
        goto error;
697
4.42M
      value = yaml_document_add_scalar(&output_document, NULL,
698
4.42M
                                       (yaml_char_t *)"MAPPING-START", -1,
699
4.42M
                                       YAML_PLAIN_SCALAR_STYLE);
700
4.42M
      if (!value)
701
0
        goto error;
702
4.42M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
703
4.42M
                                             value))
704
0
        goto error;
705
706
      /* Add 'anchor': <anchor>. */
707
708
4.42M
      if (input_event.data.mapping_start.anchor) {
709
1.06k
        key = yaml_document_add_scalar(&output_document, NULL,
710
1.06k
                                       (yaml_char_t *)"anchor", -1,
711
1.06k
                                       YAML_PLAIN_SCALAR_STYLE);
712
1.06k
        if (!key)
713
0
          goto error;
714
1.06k
        value = yaml_document_add_scalar(&output_document, NULL,
715
1.06k
                                         input_event.data.mapping_start.anchor,
716
1.06k
                                         -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
717
1.06k
        if (!value)
718
0
          goto error;
719
1.06k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
720
1.06k
                                               key, value))
721
0
          goto error;
722
1.06k
      }
723
724
      /* Add 'tag': <tag>. */
725
726
4.42M
      if (input_event.data.mapping_start.tag) {
727
15.7k
        key = yaml_document_add_scalar(&output_document, NULL,
728
15.7k
                                       (yaml_char_t *)"tag", -1,
729
15.7k
                                       YAML_PLAIN_SCALAR_STYLE);
730
15.7k
        if (!key)
731
0
          goto error;
732
15.7k
        value = yaml_document_add_scalar(&output_document, NULL,
733
15.7k
                                         input_event.data.mapping_start.tag, -1,
734
15.7k
                                         YAML_DOUBLE_QUOTED_SCALAR_STYLE);
735
15.7k
        if (!value)
736
1
          goto error;
737
15.7k
        if (!yaml_document_append_mapping_pair(&output_document, properties,
738
15.7k
                                               key, value))
739
0
          goto error;
740
15.7k
      }
741
742
      /* Add 'implicit': <flag>. */
743
744
4.42M
      key = yaml_document_add_scalar(&output_document, NULL,
745
4.42M
                                     (yaml_char_t *)"implicit", -1,
746
4.42M
                                     YAML_PLAIN_SCALAR_STYLE);
747
4.42M
      if (!key)
748
0
        goto error;
749
4.42M
      value = yaml_document_add_scalar(
750
4.42M
          &output_document, (yaml_char_t *)YAML_BOOL_TAG,
751
4.42M
          (yaml_char_t *)(input_event.data.mapping_start.implicit ? "true"
752
4.42M
                                                                  : "false"),
753
4.42M
          -1, YAML_PLAIN_SCALAR_STYLE);
754
4.42M
      if (!value)
755
0
        goto error;
756
4.42M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
757
4.42M
                                             value))
758
0
        goto error;
759
760
      /* Display the style information. */
761
762
4.42M
      if (input_event.data.sequence_start.style) {
763
4.42M
        yaml_sequence_style_t style = input_event.data.sequence_start.style;
764
765
        /* Add 'style': <style>. */
766
767
4.42M
        key = yaml_document_add_scalar(&output_document, NULL,
768
4.42M
                                       (yaml_char_t *)"style", -1,
769
4.42M
                                       YAML_PLAIN_SCALAR_STYLE);
770
4.42M
        if (!key)
771
0
          goto error;
772
4.42M
        value = yaml_document_add_scalar(
773
4.42M
            &output_document, NULL,
774
4.42M
            (yaml_char_t *)(style == YAML_BLOCK_MAPPING_STYLE
775
4.42M
                                ? "block"
776
4.42M
                                : style == YAML_FLOW_MAPPING_STYLE ? "flow"
777
96.4k
                                                                   : "unknown"),
778
4.42M
            -1, YAML_PLAIN_SCALAR_STYLE);
779
4.42M
        if (!value)
780
0
          goto error;
781
4.42M
        if (!yaml_document_append_mapping_pair(&output_document, properties,
782
4.42M
                                               key, value))
783
0
          goto error;
784
4.42M
      }
785
786
4.42M
      break;
787
788
4.42M
    case YAML_MAPPING_END_EVENT:
789
790
      /* Add 'type': 'MAPPING-END'. */
791
792
4.34M
      key = yaml_document_add_scalar(&output_document, NULL,
793
4.34M
                                     (yaml_char_t *)"type", -1,
794
4.34M
                                     YAML_PLAIN_SCALAR_STYLE);
795
4.34M
      if (!key)
796
0
        goto error;
797
4.34M
      value = yaml_document_add_scalar(&output_document, NULL,
798
4.34M
                                       (yaml_char_t *)"MAPPING-END", -1,
799
4.34M
                                       YAML_PLAIN_SCALAR_STYLE);
800
4.34M
      if (!value)
801
0
        goto error;
802
4.34M
      if (!yaml_document_append_mapping_pair(&output_document, properties, key,
803
4.34M
                                             value))
804
0
        goto error;
805
806
4.34M
      break;
807
808
4.34M
    default:
809
      /* It couldn't really happen. */
810
0
      break;
811
27.9M
    }
812
813
    /* Delete the event object. */
814
815
27.9M
    yaml_event_delete(&input_event);
816
27.9M
  }
817
818
4.29k
  if (!yaml_emitter_dump(&emitter, &output_document))
819
4.29k
    goto error;
820
821
0
  yaml_emitter_close(&emitter);
822
823
8.94k
error:
824
825
8.94k
  free(out.buf);
826
827
8.94k
  yaml_event_delete(&input_event);
828
8.94k
  yaml_document_delete(&output_document);
829
8.94k
  yaml_parser_delete(&parser);
830
8.94k
  yaml_emitter_delete(&emitter);
831
832
8.94k
  return 0;
833
0
}