X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fmetadata%2Fctf-parser.y;h=5d2415c7d6a03c47b841d451c808fd719b9fc9f6;hp=1ccc718a0954ff063e72cefc7c3bd69b75ff6961;hb=bdb55bcb9d020de89f3de16228d42dd2a7d7caad;hpb=104147cd176d0b6f635777f34a7df15a33a45c15 diff --git a/formats/ctf/metadata/ctf-parser.y b/formats/ctf/metadata/ctf-parser.y index 1ccc718a..5d2415c7 100644 --- a/formats/ctf/metadata/ctf-parser.y +++ b/formats/ctf/metadata/ctf-parser.y @@ -83,6 +83,11 @@ static const char *node_type_to_str[] = { #undef ENTRY }; +/* Static node for out of memory errors */ +static __thread struct ctf_node error_node = { + .type = NODE_ERROR, +}; + BT_HIDDEN const char *node_type(struct ctf_node *node) { @@ -327,8 +332,11 @@ static struct ctf_node *make_node(struct ctf_scanner *scanner, struct ctf_node *node; node = malloc(sizeof(*node)); - if (!node) - return NULL; + if (!node) { + error_node.lineno = yyget_lineno(scanner->scanner); + printfl_fatal(error_node.lineno, "out of memory"); + return &error_node; + } memset(node, 0, sizeof(*node)); node->type = type; node->lineno = yyget_lineno(scanner->scanner); @@ -338,6 +346,7 @@ static struct ctf_node *make_node(struct ctf_scanner *scanner, switch (type) { case NODE_ROOT: + node->type = NODE_ERROR; printfn_fatal(node, "trying to create root node"); break; @@ -418,6 +427,7 @@ static struct ctf_node *make_node(struct ctf_scanner *scanner, case NODE_UNKNOWN: default: + node->type = NODE_ERROR; printfn_fatal(node, "unknown node type '%d'", (int) type); break; }