53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
From ff577b94511f9fc314435a1154f1124dccbe57ec Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Tina=20M=C3=BCller?= <cpan2@tinita.de>
|
|
Date: Mon, 8 Apr 2024 23:32:52 +0200
|
|
Subject: [PATCH] Fix emitter states handling when write_indicator fails
|
|
|
|
There are cases where yaml_emitter_write_indicator fails.
|
|
In that case POP is called on emitter->indents but not on emitter->states,
|
|
which results in a leftover event in the stack, and later POP is called
|
|
on an empty emitter->indents stack.
|
|
|
|
This commit does not fix the case of the failing yaml_emitter_write_indicator.
|
|
This is still investigated.
|
|
---
|
|
src/emitter.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/emitter.c b/src/emitter.c
|
|
index 609b28a4..0aca6c34 100644
|
|
--- a/src/emitter.c
|
|
+++ b/src/emitter.c
|
|
@@ -759,6 +759,7 @@ yaml_emitter_emit_flow_sequence_item(yaml_emitter_t *emitter,
|
|
{
|
|
emitter->flow_level --;
|
|
emitter->indent = POP(emitter, emitter->indents);
|
|
+ emitter->state = POP(emitter, emitter->states);
|
|
if (emitter->canonical && !first) {
|
|
if (!yaml_emitter_write_indicator(emitter, ",", 0, 0, 0))
|
|
return 0;
|
|
@@ -767,7 +768,6 @@ yaml_emitter_emit_flow_sequence_item(yaml_emitter_t *emitter,
|
|
}
|
|
if (!yaml_emitter_write_indicator(emitter, "]", 0, 0, 0))
|
|
return 0;
|
|
- emitter->state = POP(emitter, emitter->states);
|
|
|
|
return 1;
|
|
}
|
|
@@ -808,6 +808,7 @@ yaml_emitter_emit_flow_mapping_key(yaml_emitter_t *emitter,
|
|
return 0;
|
|
emitter->flow_level --;
|
|
emitter->indent = POP(emitter, emitter->indents);
|
|
+ emitter->state = POP(emitter, emitter->states);
|
|
if (emitter->canonical && !first) {
|
|
if (!yaml_emitter_write_indicator(emitter, ",", 0, 0, 0))
|
|
return 0;
|
|
@@ -816,7 +817,6 @@ yaml_emitter_emit_flow_mapping_key(yaml_emitter_t *emitter,
|
|
}
|
|
if (!yaml_emitter_write_indicator(emitter, "}", 0, 0, 0))
|
|
return 0;
|
|
- emitter->state = POP(emitter, emitter->states);
|
|
|
|
return 1;
|
|
}
|