| ... | @@ -326,6 +326,7 @@ fn parse_document(p: *Parser) Error!Document { | ... | @@ -326,6 +326,7 @@ fn parse_document(p: *Parser) Error!Document { |
| 326 | fn parse_mapping(p: *Parser) Error!Mapping { | 326 | fn parse_mapping(p: *Parser) Error!Mapping { |
| 327 | var res = std.ArrayList(Key).init(p.alloc); | 327 | var res = std.ArrayList(Key).init(p.alloc); |
| 328 | errdefer res.deinit(); | 328 | errdefer res.deinit(); |
| | 329 | errdefer for (res.items) |k| k.deinit(p.alloc); |
| 329 | | 330 | |
| 330 | while (true) { | 331 | while (true) { |
| 331 | const tok = try p.next(); | 332 | const tok = try p.next(); |
| ... | @@ -335,10 +336,12 @@ fn parse_mapping(p: *Parser) Error!Mapping { | ... | @@ -335,10 +336,12 @@ fn parse_mapping(p: *Parser) Error!Mapping { |
| 335 | if (tok.type != c.YAML_SCALAR_EVENT) { | 336 | if (tok.type != c.YAML_SCALAR_EVENT) { |
| 336 | return error.YamlUnexpectedToken; | 337 | return error.YamlUnexpectedToken; |
| 337 | } | 338 | } |
| 338 | try res.append(Key{ | 339 | |
| 339 | .key = try get_event_string(tok, p), | 340 | const key = try get_event_string(tok, p); |
| 340 | .value = try parse_value(p), | 341 | errdefer p.alloc.free(key); |
| 341 | }); | 342 | const value = try parse_value(p); |
| | 343 | errdefer value.deinit(p.alloc); |
| | 344 | try res.append(Key{ .key = key, .value = value }); |
| 342 | } | 345 | } |
| 343 | } | 346 | } |
| 344 | | 347 | |