Coverage Report

Created: 2023-06-07 06:05

/src/libyaml_deconstructor_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.57k
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
29
8.57k
  if (size < 2)
30
1
    return 0;
31
32
8.57k
  bool done = false;
33
8.57k
  bool is_canonical = data[0] & 1;
34
8.57k
  bool is_unicode = data[1] & 1;
35
8.57k
  data += 2;
36
8.57k
  size -= 2;
37
38
8.57k
  yaml_parser_t parser;
39
8.57k
  yaml_emitter_t emitter;
40
8.57k
  yaml_event_t input_event;
41
8.57k
  yaml_event_t output_event;
42
43
  /* Initialize the parser and emitter objects. */
44
45
8.57k
  if (!yaml_parser_initialize(&parser)) {
46
0
    return 1;
47
0
  }
48
49
8.57k
  if (!yaml_emitter_initialize(&emitter)) {
50
0
    yaml_parser_delete(&parser);
51
0
    return 1;
52
0
  }
53
54
  /* Set the parser parameters. */
55
56
8.57k
  yaml_parser_set_input_string(&parser, data, size);
57
58
  /* Set the emitter parameters. */
59
8.57k
  yaml_output_buffer_t out = {/*buf=*/NULL, /*size=*/0};
60
8.57k
  yaml_emitter_set_output(&emitter, yaml_write_handler, &out);
61
62
8.57k
  yaml_emitter_set_canonical(&emitter, is_canonical);
63
8.57k
  yaml_emitter_set_unicode(&emitter, is_unicode);
64
65
  /* Create and emit the STREAM-START event. */
66
67
8.57k
  if (!yaml_stream_start_event_initialize(&output_event, YAML_UTF8_ENCODING))
68
0
    goto error;
69
8.57k
  if (!yaml_emitter_emit(&emitter, &output_event))
70
0
    goto error;
71
72
  /* Create and emit the DOCUMENT-START event. */
73
74
8.57k
  if (!yaml_document_start_event_initialize(&output_event, NULL, NULL, NULL, 0))
75
0
    goto error;
76
8.57k
  if (!yaml_emitter_emit(&emitter, &output_event))
77
0
    goto error;
78
79
  /* Create and emit the SEQUENCE-START event. */
80
81
8.57k
  if (!yaml_sequence_start_event_initialize(
82
8.57k
          &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:seq", 1,
83
8.57k
          YAML_BLOCK_SEQUENCE_STYLE))
84
0
    goto error;
85
8.57k
  if (!yaml_emitter_emit(&emitter, &output_event))
86
0
    goto error;
87
88
  /* Loop through the input events. */
89
90
150k
  while (!done) {
91
    /* Get the next event. */
92
93
147k
    if (!yaml_parser_parse(&parser, &input_event))
94
4.89k
      goto error;
95
96
    /* Check if this is the stream end. */
97
98
142k
    done = (input_event.type == YAML_STREAM_END_EVENT);
99
100
    /* Create and emit a MAPPING-START event. */
101
102
142k
    if (!yaml_mapping_start_event_initialize(
103
142k
            &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:map", 1,
104
142k
            YAML_BLOCK_MAPPING_STYLE))
105
0
      goto error;
106
142k
    if (!yaml_emitter_emit(&emitter, &output_event))
107
0
      goto error;
108
109
    /* Analyze the event. */
110
111
142k
    switch (input_event.type) {
112
8.44k
    case YAML_STREAM_START_EVENT:
113
114
      /* Write 'type'. */
115
116
8.44k
      if (!yaml_scalar_event_initialize(
117
8.44k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
118
8.44k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
119
0
        goto error;
120
8.44k
      if (!yaml_emitter_emit(&emitter, &output_event))
121
0
        goto error;
122
123
      /* Write 'STREAM-START'. */
124
125
8.44k
      if (!yaml_scalar_event_initialize(
126
8.44k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
127
8.44k
              (yaml_char_t *)"STREAM-START", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
128
0
        goto error;
129
8.44k
      if (!yaml_emitter_emit(&emitter, &output_event))
130
0
        goto error;
131
132
      /* Display encoding information. */
133
134
8.44k
      if (input_event.data.stream_start.encoding) {
135
8.44k
        yaml_encoding_t encoding = input_event.data.stream_start.encoding;
136
137
        /* Write 'encoding'. */
138
139
8.44k
        if (!yaml_scalar_event_initialize(
140
8.44k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
141
8.44k
                (yaml_char_t *)"encoding", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
142
0
          goto error;
143
8.44k
        if (!yaml_emitter_emit(&emitter, &output_event))
144
0
          goto error;
145
146
        /* Write the stream encoding. */
147
148
8.44k
        if (!yaml_scalar_event_initialize(
149
8.44k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
150
8.44k
                (yaml_char_t *)(encoding == YAML_UTF8_ENCODING
151
8.44k
                                    ? "utf-8"
152
8.44k
                                    : encoding == YAML_UTF16LE_ENCODING
153
355
                                          ? "utf-16-le"
154
355
                                          : encoding == YAML_UTF16BE_ENCODING
155
281
                                                ? "utf-16-be"
156
281
                                                : "unknown"),
157
8.44k
                -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
158
0
          goto error;
159
8.44k
        if (!yaml_emitter_emit(&emitter, &output_event))
160
0
          goto error;
161
8.44k
      }
162
163
8.44k
      break;
164
165
8.44k
    case YAML_STREAM_END_EVENT:
166
167
      /* Write 'type'. */
168
169
3.37k
      if (!yaml_scalar_event_initialize(
170
3.37k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
171
3.37k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
172
0
        goto error;
173
3.37k
      if (!yaml_emitter_emit(&emitter, &output_event))
174
0
        goto error;
175
176
      /* Write 'STREAM-END'. */
177
178
3.37k
      if (!yaml_scalar_event_initialize(
179
3.37k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
180
3.37k
              (yaml_char_t *)"STREAM-END", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
181
0
        goto error;
182
3.37k
      if (!yaml_emitter_emit(&emitter, &output_event))
183
0
        goto error;
184
185
3.37k
      break;
186
187
10.7k
    case YAML_DOCUMENT_START_EVENT:
188
189
      /* Write 'type'. */
190
191
10.7k
      if (!yaml_scalar_event_initialize(
192
10.7k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
193
10.7k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
194
0
        goto error;
195
10.7k
      if (!yaml_emitter_emit(&emitter, &output_event))
196
0
        goto error;
197
198
      /* Write 'DOCUMENT-START'. */
199
200
10.7k
      if (!yaml_scalar_event_initialize(&output_event, NULL,
201
10.7k
                                        (yaml_char_t *)"tag:yaml.org,2002:str",
202
10.7k
                                        (yaml_char_t *)"DOCUMENT-START", -1, 1,
203
10.7k
                                        1, YAML_PLAIN_SCALAR_STYLE))
204
0
        goto error;
205
10.7k
      if (!yaml_emitter_emit(&emitter, &output_event))
206
0
        goto error;
207
208
      /* Display the document version numbers. */
209
210
10.7k
      if (input_event.data.document_start.version_directive) {
211
367
        yaml_version_directive_t *version =
212
367
            input_event.data.document_start.version_directive;
213
367
        char number[64];
214
215
        /* Write 'version'. */
216
367
        if (!yaml_scalar_event_initialize(
217
367
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
218
367
                (yaml_char_t *)"version", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
219
0
          goto error;
220
367
        if (!yaml_emitter_emit(&emitter, &output_event))
221
1
          goto error;
222
223
        /* Write '{'. */
224
225
366
        if (!yaml_mapping_start_event_initialize(
226
366
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:map", 1,
227
366
                YAML_FLOW_MAPPING_STYLE))
228
0
          goto error;
229
366
        if (!yaml_emitter_emit(&emitter, &output_event))
230
0
          goto error;
231
232
        /* Write 'major'. */
233
234
366
        if (!yaml_scalar_event_initialize(
235
366
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
236
366
                (yaml_char_t *)"major", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
237
0
          goto error;
238
366
        if (!yaml_emitter_emit(&emitter, &output_event))
239
0
          goto error;
240
241
        /* Write a number. */
242
243
366
        sprintf(number, "%d", version->major);
244
366
        if (!yaml_scalar_event_initialize(
245
366
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:int",
246
366
                (yaml_char_t *)number, -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
247
0
          goto error;
248
366
        if (!yaml_emitter_emit(&emitter, &output_event))
249
0
          goto error;
250
251
        /* Write 'minor'. */
252
253
366
        if (!yaml_scalar_event_initialize(
254
366
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
255
366
                (yaml_char_t *)"minor", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
256
0
          goto error;
257
366
        if (!yaml_emitter_emit(&emitter, &output_event))
258
1
          goto error;
259
260
        /* Write a number. */
261
262
365
        sprintf(number, "%d", version->minor);
263
365
        if (!yaml_scalar_event_initialize(
264
365
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:int",
265
365
                (yaml_char_t *)number, -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
266
0
          goto error;
267
365
        if (!yaml_emitter_emit(&emitter, &output_event))
268
1
          goto error;
269
270
        /* Write '}'. */
271
272
364
        if (!yaml_mapping_end_event_initialize(&output_event))
273
0
          goto error;
274
364
        if (!yaml_emitter_emit(&emitter, &output_event))
275
1
          goto error;
276
364
      }
277
278
      /* Display the document tag directives. */
279
280
10.7k
      if (input_event.data.document_start.tag_directives.start !=
281
10.7k
          input_event.data.document_start.tag_directives.end) {
282
2.49k
        yaml_tag_directive_t *tag;
283
284
        /* Write 'tags'. */
285
2.49k
        if (!yaml_scalar_event_initialize(
286
2.49k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
287
2.49k
                (yaml_char_t *)"tags", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
288
0
          goto error;
289
2.49k
        if (!yaml_emitter_emit(&emitter, &output_event))
290
1
          goto error;
291
292
        /* Start a block sequence. */
293
294
2.49k
        if (!yaml_sequence_start_event_initialize(
295
2.49k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:seq", 1,
296
2.49k
                YAML_BLOCK_SEQUENCE_STYLE))
297
0
          goto error;
298
2.49k
        if (!yaml_emitter_emit(&emitter, &output_event))
299
0
          goto error;
300
301
2.49k
        for (tag = input_event.data.document_start.tag_directives.start;
302
6.99k
             tag != input_event.data.document_start.tag_directives.end; tag++) {
303
          /* Write '{'. */
304
305
4.50k
          if (!yaml_mapping_start_event_initialize(
306
4.50k
                  &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:map",
307
4.50k
                  1, YAML_FLOW_MAPPING_STYLE))
308
0
            goto error;
309
4.50k
          if (!yaml_emitter_emit(&emitter, &output_event))
310
0
            goto error;
311
312
          /* Write 'handle'. */
313
314
4.50k
          if (!yaml_scalar_event_initialize(
315
4.50k
                  &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
316
4.50k
                  (yaml_char_t *)"handle", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
317
0
            goto error;
318
4.50k
          if (!yaml_emitter_emit(&emitter, &output_event))
319
1
            goto error;
320
321
          /* Write the tag directive handle. */
322
323
4.50k
          if (!yaml_scalar_event_initialize(
324
4.50k
                  &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
325
4.50k
                  (yaml_char_t *)tag->handle, -1, 0, 1,
326
4.50k
                  YAML_DOUBLE_QUOTED_SCALAR_STYLE))
327
0
            goto error;
328
4.50k
          if (!yaml_emitter_emit(&emitter, &output_event))
329
0
            goto error;
330
331
          /* Write 'prefix'. */
332
333
4.50k
          if (!yaml_scalar_event_initialize(
334
4.50k
                  &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
335
4.50k
                  (yaml_char_t *)"prefix", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
336
0
            goto error;
337
4.50k
          if (!yaml_emitter_emit(&emitter, &output_event))
338
4
            goto error;
339
340
          /* Write the tag directive prefix. */
341
342
4.50k
          if (!yaml_scalar_event_initialize(
343
4.50k
                  &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
344
4.50k
                  (yaml_char_t *)tag->prefix, -1, 0, 1,
345
4.50k
                  YAML_DOUBLE_QUOTED_SCALAR_STYLE))
346
2
            goto error;
347
4.50k
          if (!yaml_emitter_emit(&emitter, &output_event))
348
1
            goto error;
349
350
          /* Write '}'. */
351
352
4.49k
          if (!yaml_mapping_end_event_initialize(&output_event))
353
0
            goto error;
354
4.49k
          if (!yaml_emitter_emit(&emitter, &output_event))
355
1
            goto error;
356
4.49k
        }
357
358
        /* End a block sequence. */
359
360
2.48k
        if (!yaml_sequence_end_event_initialize(&output_event))
361
0
          goto error;
362
2.48k
        if (!yaml_emitter_emit(&emitter, &output_event))
363
1
          goto error;
364
2.48k
      }
365
366
      /* Write 'implicit'. */
367
368
10.7k
      if (!yaml_scalar_event_initialize(
369
10.7k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
370
10.7k
              (yaml_char_t *)"implicit", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
371
0
        goto error;
372
10.7k
      if (!yaml_emitter_emit(&emitter, &output_event))
373
2
        goto error;
374
375
      /* Write if the document is implicit. */
376
377
10.7k
      if (!yaml_scalar_event_initialize(
378
10.7k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:bool",
379
10.7k
              (yaml_char_t *)(input_event.data.document_start.implicit
380
10.7k
                                  ? "true"
381
10.7k
                                  : "false"),
382
10.7k
              -1, 1, 0, YAML_PLAIN_SCALAR_STYLE))
383
0
        goto error;
384
10.7k
      if (!yaml_emitter_emit(&emitter, &output_event))
385
4
        goto error;
386
387
10.6k
      break;
388
389
10.6k
    case YAML_DOCUMENT_END_EVENT:
390
391
      /* Write 'type'. */
392
393
8.41k
      if (!yaml_scalar_event_initialize(
394
8.41k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
395
8.41k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
396
0
        goto error;
397
8.41k
      if (!yaml_emitter_emit(&emitter, &output_event))
398
0
        goto error;
399
400
      /* Write 'DOCUMENT-END'. */
401
402
8.41k
      if (!yaml_scalar_event_initialize(
403
8.41k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
404
8.41k
              (yaml_char_t *)"DOCUMENT-END", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
405
0
        goto error;
406
8.41k
      if (!yaml_emitter_emit(&emitter, &output_event))
407
0
        goto error;
408
409
      /* Write 'implicit'. */
410
411
8.41k
      if (!yaml_scalar_event_initialize(
412
8.41k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
413
8.41k
              (yaml_char_t *)"implicit", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
414
0
        goto error;
415
8.41k
      if (!yaml_emitter_emit(&emitter, &output_event))
416
4
        goto error;
417
418
      /* Write if the document is implicit. */
419
420
8.40k
      if (!yaml_scalar_event_initialize(
421
8.40k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:bool",
422
8.40k
              (yaml_char_t *)(input_event.data.document_end.implicit ? "true"
423
8.40k
                                                                     : "false"),
424
8.40k
              -1, 1, 0, YAML_PLAIN_SCALAR_STYLE))
425
0
        goto error;
426
8.40k
      if (!yaml_emitter_emit(&emitter, &output_event))
427
3
        goto error;
428
429
8.40k
      break;
430
431
8.40k
    case YAML_ALIAS_EVENT:
432
433
      /* Write 'type'. */
434
435
1.90k
      if (!yaml_scalar_event_initialize(
436
1.90k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
437
1.90k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
438
0
        goto error;
439
1.90k
      if (!yaml_emitter_emit(&emitter, &output_event))
440
0
        goto error;
441
442
      /* Write 'ALIAS'. */
443
444
1.90k
      if (!yaml_scalar_event_initialize(
445
1.90k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
446
1.90k
              (yaml_char_t *)"ALIAS", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
447
0
        goto error;
448
1.90k
      if (!yaml_emitter_emit(&emitter, &output_event))
449
0
        goto error;
450
451
      /* Write 'anchor'. */
452
453
1.90k
      if (!yaml_scalar_event_initialize(
454
1.90k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
455
1.90k
              (yaml_char_t *)"anchor", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
456
0
        goto error;
457
1.90k
      if (!yaml_emitter_emit(&emitter, &output_event))
458
2
        goto error;
459
460
      /* Write the alias anchor. */
461
462
1.90k
      if (!yaml_scalar_event_initialize(&output_event, NULL,
463
1.90k
                                        (yaml_char_t *)"tag:yaml.org,2002:str",
464
1.90k
                                        input_event.data.alias.anchor, -1, 0, 1,
465
1.90k
                                        YAML_DOUBLE_QUOTED_SCALAR_STYLE))
466
0
        goto error;
467
1.90k
      if (!yaml_emitter_emit(&emitter, &output_event))
468
11
        goto error;
469
470
1.89k
      break;
471
472
59.8k
    case YAML_SCALAR_EVENT:
473
474
      /* Write 'type'. */
475
476
59.8k
      if (!yaml_scalar_event_initialize(
477
59.8k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
478
59.8k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
479
0
        goto error;
480
59.8k
      if (!yaml_emitter_emit(&emitter, &output_event))
481
0
        goto error;
482
483
      /* Write 'SCALAR'. */
484
485
59.8k
      if (!yaml_scalar_event_initialize(
486
59.8k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
487
59.8k
              (yaml_char_t *)"SCALAR", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
488
0
        goto error;
489
59.8k
      if (!yaml_emitter_emit(&emitter, &output_event))
490
0
        goto error;
491
492
      /* Display the scalar anchor. */
493
494
59.8k
      if (input_event.data.scalar.anchor) {
495
        /* Write 'anchor'. */
496
497
699
        if (!yaml_scalar_event_initialize(
498
699
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
499
699
                (yaml_char_t *)"anchor", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
500
0
          goto error;
501
699
        if (!yaml_emitter_emit(&emitter, &output_event))
502
1
          goto error;
503
504
        /* Write the scalar anchor. */
505
506
698
        if (!yaml_scalar_event_initialize(
507
698
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
508
698
                input_event.data.scalar.anchor, -1, 0, 1,
509
698
                YAML_DOUBLE_QUOTED_SCALAR_STYLE))
510
0
          goto error;
511
698
        if (!yaml_emitter_emit(&emitter, &output_event))
512
2
          goto error;
513
698
      }
514
515
      /* Display the scalar tag. */
516
517
59.8k
      if (input_event.data.scalar.tag) {
518
        /* Write 'tag'. */
519
520
11.7k
        if (!yaml_scalar_event_initialize(
521
11.7k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
522
11.7k
                (yaml_char_t *)"tag", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
523
0
          goto error;
524
11.7k
        if (!yaml_emitter_emit(&emitter, &output_event))
525
2
          goto error;
526
527
        /* Write the scalar tag. */
528
529
11.7k
        if (!yaml_scalar_event_initialize(
530
11.7k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
531
11.7k
                input_event.data.scalar.tag, -1, 0, 1,
532
11.7k
                YAML_DOUBLE_QUOTED_SCALAR_STYLE))
533
29
          goto error;
534
11.6k
        if (!yaml_emitter_emit(&emitter, &output_event))
535
43
          goto error;
536
11.6k
      }
537
538
      /* Display the scalar value. */
539
540
      /* Write 'value'. */
541
542
59.7k
      if (!yaml_scalar_event_initialize(
543
59.7k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
544
59.7k
              (yaml_char_t *)"value", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
545
0
        goto error;
546
59.7k
      if (!yaml_emitter_emit(&emitter, &output_event))
547
12
        goto error;
548
549
      /* Write the scalar value. */
550
551
59.7k
      if (!yaml_scalar_event_initialize(
552
59.7k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
553
59.7k
              input_event.data.scalar.value, input_event.data.scalar.length, 0,
554
59.7k
              1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))
555
0
        goto error;
556
59.7k
      if (!yaml_emitter_emit(&emitter, &output_event))
557
81
        goto error;
558
559
      /* Display if the scalar tag is implicit. */
560
561
      /* Write 'implicit'. */
562
563
59.6k
      if (!yaml_scalar_event_initialize(
564
59.6k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
565
59.6k
              (yaml_char_t *)"implicit", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
566
0
        goto error;
567
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
568
2
        goto error;
569
570
      /* Write '{'. */
571
572
59.6k
      if (!yaml_mapping_start_event_initialize(
573
59.6k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:map", 1,
574
59.6k
              YAML_FLOW_MAPPING_STYLE))
575
0
        goto error;
576
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
577
0
        goto error;
578
579
      /* Write 'plain'. */
580
581
59.6k
      if (!yaml_scalar_event_initialize(
582
59.6k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
583
59.6k
              (yaml_char_t *)"plain", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
584
0
        goto error;
585
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
586
0
        goto error;
587
588
      /* Write if the scalar is implicit in the plain style. */
589
590
59.6k
      if (!yaml_scalar_event_initialize(
591
59.6k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:bool",
592
59.6k
              (yaml_char_t *)(input_event.data.scalar.plain_implicit ? "true"
593
59.6k
                                                                     : "false"),
594
59.6k
              -1, 1, 0, YAML_PLAIN_SCALAR_STYLE))
595
0
        goto error;
596
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
597
0
        goto error;
598
599
      /* Write 'quoted'. */
600
601
59.6k
      if (!yaml_scalar_event_initialize(
602
59.6k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
603
59.6k
              (yaml_char_t *)"non-plain", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
604
0
        goto error;
605
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
606
17
        goto error;
607
608
      /* Write if the scalar is implicit in a non-plain style. */
609
610
59.6k
      if (!yaml_scalar_event_initialize(
611
59.6k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:bool",
612
59.6k
              (yaml_char_t *)(input_event.data.scalar.quoted_implicit
613
59.6k
                                  ? "true"
614
59.6k
                                  : "false"),
615
59.6k
              -1, 1, 0, YAML_PLAIN_SCALAR_STYLE))
616
0
        goto error;
617
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
618
7
        goto error;
619
620
      /* Write '}'. */
621
622
59.6k
      if (!yaml_mapping_end_event_initialize(&output_event))
623
0
        goto error;
624
59.6k
      if (!yaml_emitter_emit(&emitter, &output_event))
625
1
        goto error;
626
627
      /* Display the style information. */
628
629
59.6k
      if (input_event.data.scalar.style) {
630
59.6k
        yaml_scalar_style_t style = input_event.data.scalar.style;
631
632
        /* Write 'style'. */
633
634
59.6k
        if (!yaml_scalar_event_initialize(
635
59.6k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
636
59.6k
                (yaml_char_t *)"style", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
637
0
          goto error;
638
59.6k
        if (!yaml_emitter_emit(&emitter, &output_event))
639
5
          goto error;
640
641
        /* Write the scalar style. */
642
643
59.6k
        if (!yaml_scalar_event_initialize(
644
59.6k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
645
59.6k
                (yaml_char_t
646
59.6k
                     *)(style == YAML_PLAIN_SCALAR_STYLE
647
59.6k
                            ? "plain"
648
59.6k
                            : style == YAML_SINGLE_QUOTED_SCALAR_STYLE
649
7.91k
                                  ? "single-quoted"
650
7.91k
                                  : style == YAML_DOUBLE_QUOTED_SCALAR_STYLE
651
6.77k
                                        ? "double-quoted"
652
6.77k
                                        : style == YAML_LITERAL_SCALAR_STYLE
653
5.63k
                                              ? "literal"
654
5.63k
                                              : style ==
655
2.86k
                                                        YAML_FOLDED_SCALAR_STYLE
656
2.86k
                                                    ? "folded"
657
2.86k
                                                    : "unknown"),
658
59.6k
                -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
659
0
          goto error;
660
59.6k
        if (!yaml_emitter_emit(&emitter, &output_event))
661
5
          goto error;
662
59.6k
      }
663
664
59.6k
      break;
665
666
59.6k
    case YAML_SEQUENCE_START_EVENT:
667
668
      /* Write 'type'. */
669
670
19.4k
      if (!yaml_scalar_event_initialize(
671
19.4k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
672
19.4k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
673
0
        goto error;
674
19.4k
      if (!yaml_emitter_emit(&emitter, &output_event))
675
0
        goto error;
676
677
      /* Write 'SEQUENCE-START'. */
678
679
19.4k
      if (!yaml_scalar_event_initialize(&output_event, NULL,
680
19.4k
                                        (yaml_char_t *)"tag:yaml.org,2002:str",
681
19.4k
                                        (yaml_char_t *)"SEQUENCE-START", -1, 1,
682
19.4k
                                        1, YAML_PLAIN_SCALAR_STYLE))
683
0
        goto error;
684
19.4k
      if (!yaml_emitter_emit(&emitter, &output_event))
685
0
        goto error;
686
687
      /* Display the sequence anchor. */
688
689
19.4k
      if (input_event.data.sequence_start.anchor) {
690
        /* Write 'anchor'. */
691
692
766
        if (!yaml_scalar_event_initialize(
693
766
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
694
766
                (yaml_char_t *)"anchor", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
695
0
          goto error;
696
766
        if (!yaml_emitter_emit(&emitter, &output_event))
697
1
          goto error;
698
699
        /* Write the sequence anchor. */
700
701
765
        if (!yaml_scalar_event_initialize(
702
765
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
703
765
                input_event.data.sequence_start.anchor, -1, 0, 1,
704
765
                YAML_DOUBLE_QUOTED_SCALAR_STYLE))
705
0
          goto error;
706
765
        if (!yaml_emitter_emit(&emitter, &output_event))
707
3
          goto error;
708
765
      }
709
710
      /* Display the sequence tag. */
711
712
19.4k
      if (input_event.data.sequence_start.tag) {
713
        /* Write 'tag'. */
714
715
1.77k
        if (!yaml_scalar_event_initialize(
716
1.77k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
717
1.77k
                (yaml_char_t *)"tag", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
718
0
          goto error;
719
1.77k
        if (!yaml_emitter_emit(&emitter, &output_event))
720
1
          goto error;
721
722
        /* Write the sequence tag. */
723
724
1.77k
        if (!yaml_scalar_event_initialize(
725
1.77k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
726
1.77k
                input_event.data.sequence_start.tag, -1, 0, 1,
727
1.77k
                YAML_DOUBLE_QUOTED_SCALAR_STYLE))
728
1
          goto error;
729
1.77k
        if (!yaml_emitter_emit(&emitter, &output_event))
730
1
          goto error;
731
1.77k
      }
732
733
      /* Write 'implicit'. */
734
735
19.4k
      if (!yaml_scalar_event_initialize(
736
19.4k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
737
19.4k
              (yaml_char_t *)"implicit", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
738
0
        goto error;
739
19.4k
      if (!yaml_emitter_emit(&emitter, &output_event))
740
7
        goto error;
741
742
      /* Write if the sequence tag is implicit. */
743
744
19.4k
      if (!yaml_scalar_event_initialize(
745
19.4k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:bool",
746
19.4k
              (yaml_char_t *)(input_event.data.sequence_start.implicit
747
19.4k
                                  ? "true"
748
19.4k
                                  : "false"),
749
19.4k
              -1, 1, 0, YAML_PLAIN_SCALAR_STYLE))
750
0
        goto error;
751
19.4k
      if (!yaml_emitter_emit(&emitter, &output_event))
752
1
        goto error;
753
754
      /* Display the style information. */
755
756
19.4k
      if (input_event.data.sequence_start.style) {
757
19.4k
        yaml_sequence_style_t style = input_event.data.sequence_start.style;
758
759
        /* Write 'style'. */
760
761
19.4k
        if (!yaml_scalar_event_initialize(
762
19.4k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
763
19.4k
                (yaml_char_t *)"style", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
764
0
          goto error;
765
19.4k
        if (!yaml_emitter_emit(&emitter, &output_event))
766
3
          goto error;
767
768
        /* Write the scalar style. */
769
770
19.3k
        if (!yaml_scalar_event_initialize(
771
19.3k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
772
19.3k
                (yaml_char_t *)(style == YAML_BLOCK_SEQUENCE_STYLE
773
19.3k
                                    ? "block"
774
19.3k
                                    : style == YAML_FLOW_SEQUENCE_STYLE
775
12.8k
                                          ? "flow"
776
12.8k
                                          : "unknown"),
777
19.3k
                -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
778
0
          goto error;
779
19.3k
        if (!yaml_emitter_emit(&emitter, &output_event))
780
6
          goto error;
781
19.3k
      }
782
783
19.3k
      break;
784
785
19.3k
    case YAML_SEQUENCE_END_EVENT:
786
787
      /* Write 'type'. */
788
789
6.61k
      if (!yaml_scalar_event_initialize(
790
6.61k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
791
6.61k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
792
0
        goto error;
793
6.61k
      if (!yaml_emitter_emit(&emitter, &output_event))
794
0
        goto error;
795
796
      /* Write 'SEQUENCE-END'. */
797
798
6.61k
      if (!yaml_scalar_event_initialize(
799
6.61k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
800
6.61k
              (yaml_char_t *)"SEQUENCE-END", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
801
0
        goto error;
802
6.61k
      if (!yaml_emitter_emit(&emitter, &output_event))
803
0
        goto error;
804
805
6.61k
      break;
806
807
17.5k
    case YAML_MAPPING_START_EVENT:
808
809
      /* Write 'type'. */
810
811
17.5k
      if (!yaml_scalar_event_initialize(
812
17.5k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
813
17.5k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
814
0
        goto error;
815
17.5k
      if (!yaml_emitter_emit(&emitter, &output_event))
816
0
        goto error;
817
818
      /* Write 'MAPPING-START'. */
819
820
17.5k
      if (!yaml_scalar_event_initialize(&output_event, NULL,
821
17.5k
                                        (yaml_char_t *)"tag:yaml.org,2002:str",
822
17.5k
                                        (yaml_char_t *)"MAPPING-START", -1, 1,
823
17.5k
                                        1, YAML_PLAIN_SCALAR_STYLE))
824
0
        goto error;
825
17.5k
      if (!yaml_emitter_emit(&emitter, &output_event))
826
0
        goto error;
827
828
      /* Display the mapping anchor. */
829
830
17.5k
      if (input_event.data.mapping_start.anchor) {
831
        /* Write 'anchor'. */
832
833
617
        if (!yaml_scalar_event_initialize(
834
617
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
835
617
                (yaml_char_t *)"anchor", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
836
0
          goto error;
837
617
        if (!yaml_emitter_emit(&emitter, &output_event))
838
1
          goto error;
839
840
        /* Write the mapping anchor. */
841
842
616
        if (!yaml_scalar_event_initialize(
843
616
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
844
616
                input_event.data.mapping_start.anchor, -1, 0, 1,
845
616
                YAML_DOUBLE_QUOTED_SCALAR_STYLE))
846
0
          goto error;
847
616
        if (!yaml_emitter_emit(&emitter, &output_event))
848
1
          goto error;
849
616
      }
850
851
      /* Display the mapping tag. */
852
853
17.5k
      if (input_event.data.mapping_start.tag) {
854
        /* Write 'tag'. */
855
856
469
        if (!yaml_scalar_event_initialize(
857
469
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
858
469
                (yaml_char_t *)"tag", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
859
0
          goto error;
860
469
        if (!yaml_emitter_emit(&emitter, &output_event))
861
1
          goto error;
862
863
        /* Write the mapping tag. */
864
865
468
        if (!yaml_scalar_event_initialize(
866
468
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
867
468
                input_event.data.mapping_start.tag, -1, 0, 1,
868
468
                YAML_DOUBLE_QUOTED_SCALAR_STYLE))
869
1
          goto error;
870
467
        if (!yaml_emitter_emit(&emitter, &output_event))
871
5
          goto error;
872
467
      }
873
874
      /* Write 'implicit'. */
875
876
17.5k
      if (!yaml_scalar_event_initialize(
877
17.5k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
878
17.5k
              (yaml_char_t *)"implicit", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
879
0
        goto error;
880
17.5k
      if (!yaml_emitter_emit(&emitter, &output_event))
881
4
        goto error;
882
883
      /* Write if the mapping tag is implicit. */
884
885
17.5k
      if (!yaml_scalar_event_initialize(
886
17.5k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:bool",
887
17.5k
              (yaml_char_t *)(input_event.data.mapping_start.implicit
888
17.5k
                                  ? "true"
889
17.5k
                                  : "false"),
890
17.5k
              -1, 1, 0, YAML_PLAIN_SCALAR_STYLE))
891
0
        goto error;
892
17.5k
      if (!yaml_emitter_emit(&emitter, &output_event))
893
1
        goto error;
894
895
      /* Display the style information. */
896
897
17.5k
      if (input_event.data.mapping_start.style) {
898
17.5k
        yaml_mapping_style_t style = input_event.data.mapping_start.style;
899
900
        /* Write 'style'. */
901
902
17.5k
        if (!yaml_scalar_event_initialize(
903
17.5k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
904
17.5k
                (yaml_char_t *)"style", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
905
0
          goto error;
906
17.5k
        if (!yaml_emitter_emit(&emitter, &output_event))
907
2
          goto error;
908
909
        /* Write the scalar style. */
910
911
17.5k
        if (!yaml_scalar_event_initialize(
912
17.5k
                &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
913
17.5k
                (yaml_char_t *)(style == YAML_BLOCK_MAPPING_STYLE
914
17.5k
                                    ? "block"
915
17.5k
                                    : style == YAML_FLOW_MAPPING_STYLE
916
9.81k
                                          ? "flow"
917
9.81k
                                          : "unknown"),
918
17.5k
                -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
919
0
          goto error;
920
17.5k
        if (!yaml_emitter_emit(&emitter, &output_event))
921
4
          goto error;
922
17.5k
      }
923
924
17.5k
      break;
925
926
17.5k
    case YAML_MAPPING_END_EVENT:
927
928
      /* Write 'type'. */
929
930
6.41k
      if (!yaml_scalar_event_initialize(
931
6.41k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
932
6.41k
              (yaml_char_t *)"type", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
933
0
        goto error;
934
6.41k
      if (!yaml_emitter_emit(&emitter, &output_event))
935
0
        goto error;
936
937
      /* Write 'MAPPING-END'. */
938
939
6.41k
      if (!yaml_scalar_event_initialize(
940
6.41k
              &output_event, NULL, (yaml_char_t *)"tag:yaml.org,2002:str",
941
6.41k
              (yaml_char_t *)"MAPPING-END", -1, 1, 1, YAML_PLAIN_SCALAR_STYLE))
942
0
        goto error;
943
6.41k
      if (!yaml_emitter_emit(&emitter, &output_event))
944
0
        goto error;
945
946
6.41k
      break;
947
948
6.41k
    default:
949
      /* It couldn't really happen. */
950
0
      break;
951
142k
    }
952
953
    /* Delete the event object. */
954
955
142k
    yaml_event_delete(&input_event);
956
957
    /* Create and emit a MAPPING-END event. */
958
959
142k
    if (!yaml_mapping_end_event_initialize(&output_event))
960
0
      goto error;
961
142k
    if (!yaml_emitter_emit(&emitter, &output_event))
962
8
      goto error;
963
142k
  }
964
965
  /* Create and emit the SEQUENCE-END event. */
966
967
3.37k
  if (!yaml_sequence_end_event_initialize(&output_event))
968
0
    goto error;
969
3.37k
  if (!yaml_emitter_emit(&emitter, &output_event))
970
4
    goto error;
971
972
  /* Create and emit the DOCUMENT-END event. */
973
974
3.37k
  if (!yaml_document_end_event_initialize(&output_event, 0))
975
0
    goto error;
976
3.37k
  if (!yaml_emitter_emit(&emitter, &output_event))
977
3.37k
    goto error;
978
979
  /* Create and emit the STREAM-END event. */
980
981
0
  if (!yaml_stream_end_event_initialize(&output_event))
982
0
    goto error;
983
0
  yaml_emitter_emit(&emitter, &output_event);
984
985
8.57k
error:
986
987
8.57k
  free(out.buf);
988
989
8.57k
  yaml_event_delete(&input_event);
990
8.57k
  yaml_parser_delete(&parser);
991
8.57k
  yaml_emitter_delete(&emitter);
992
993
8.57k
  return 0;
994
0
}