diff --git a/src/api.c b/src/api.c index 16f88bd7..3f3e29c1 100644 --- a/src/api.c +++ b/src/api.c @@ -1206,6 +1206,7 @@ yaml_document_add_scalar(yaml_document_t *document, assert(document); /* Non-NULL document object is expected. */ assert(value); /* Non-NULL value is expected. */ + if (STACK_NULL(&context, document->nodes)) goto error; if (!tag) { tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG; @@ -1258,6 +1259,7 @@ yaml_document_add_sequence(yaml_document_t *document, yaml_node_t node; assert(document); /* Non-NULL document object is expected. */ + if (STACK_NULL(&context, document->nodes)) goto error; if (!tag) { tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG; @@ -1303,6 +1305,7 @@ yaml_document_add_mapping(yaml_document_t *document, yaml_node_t node; assert(document); /* Non-NULL document object is expected. */ + if (STACK_NULL(&context, document->nodes)) goto error; if (!tag) { tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG; diff --git a/src/yaml_private.h b/src/yaml_private.h index b3351c41..5a3ba184 100644 --- a/src/yaml_private.h +++ b/src/yaml_private.h @@ -420,6 +420,11 @@ yaml_stack_extend(void **start, void **top, void **end); YAML_DECLARE(int) yaml_queue_extend(void **start, void **head, void **tail, void **end); +#define STACK_NULL(context,stack) \ + (((stack).start != NULL) ? 0 : \ + ((context)->error = YAML_MEMORY_ERROR, \ + 1)) + #define STACK_INIT(context,stack,type) \ (((stack).start = (type)yaml_malloc(INITIAL_STACK_SIZE*sizeof(*(stack).start))) ? \ ((stack).top = (stack).start, \