lib/isccfg/parser.c: Fix invalid order of DbC checks that could cause dereference before NULL check

(cherry picked from commit f855f09a55)
This commit is contained in:
Ondřej Surý 2019-09-27 12:07:32 +02:00
parent 22d5735a0e
commit 929fc207c7

View file

@ -243,7 +243,7 @@ cfg_printx(const cfg_obj_t *obj, unsigned int flags,
isc_result_t
cfg_create_tuple(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
isc_result_t result;
const cfg_tuplefielddef_t *fields = type->of;
const cfg_tuplefielddef_t *fields;
const cfg_tuplefielddef_t *f;
cfg_obj_t *obj = NULL;
unsigned int nfields = 0;
@ -253,6 +253,8 @@ cfg_create_tuple(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
REQUIRE(type != NULL);
REQUIRE(ret != NULL && *ret == NULL);
fields = type->of;
for (f = fields; f->name != NULL; f++)
nfields++;
@ -278,7 +280,7 @@ isc_result_t
cfg_parse_tuple(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
{
isc_result_t result;
const cfg_tuplefielddef_t *fields = type->of;
const cfg_tuplefielddef_t *fields;
const cfg_tuplefielddef_t *f;
cfg_obj_t *obj = NULL;
unsigned int i;
@ -287,6 +289,8 @@ cfg_parse_tuple(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
REQUIRE(type != NULL);
REQUIRE(ret != NULL && *ret == NULL);
fields = type->of;
CHECK(cfg_create_tuple(pctx, type, &obj));
for (f = fields, i = 0; f->name != NULL; f++, i++)
CHECK(cfg_parse_obj(pctx, f->type, &obj->value.tuple[i]));
@ -1795,13 +1799,15 @@ cfg_parse_spacelist(cfg_parser_t *pctx, const cfg_type_t *listtype,
cfg_obj_t **ret)
{
cfg_obj_t *listobj = NULL;
const cfg_type_t *listof = listtype->of;
const cfg_type_t *listof;
isc_result_t result;
REQUIRE(pctx != NULL);
REQUIRE(listtype != NULL);
REQUIRE(ret != NULL && *ret == NULL);
listof = listtype->of;
CHECK(cfg_create_list(pctx, listtype, &listobj));
for (;;) {
@ -1905,7 +1911,7 @@ cfg_listelt_value(const cfg_listelt_t *elt) {
isc_result_t
cfg_parse_mapbody(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
{
const cfg_clausedef_t * const *clausesets = type->of;
const cfg_clausedef_t * const *clausesets;
isc_result_t result;
const cfg_clausedef_t * const *clauseset;
const cfg_clausedef_t *clause;
@ -1920,6 +1926,8 @@ cfg_parse_mapbody(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
REQUIRE(type != NULL);
REQUIRE(ret != NULL && *ret == NULL);
clausesets = type->of;
CHECK(create_map(pctx, type, &obj));
obj->value.map.clausesets = clausesets;
@ -3019,12 +3027,14 @@ cfg_print_sockaddr(cfg_printer_t *pctx, const cfg_obj_t *obj) {
void
cfg_doc_sockaddr(cfg_printer_t *pctx, const cfg_type_t *type) {
const unsigned int *flagp = type->of;
const unsigned int *flagp;
int n = 0;
REQUIRE(pctx != NULL);
REQUIRE(type != NULL);
flagp = type->of;
cfg_print_cstr(pctx, "( ");
if ((*flagp & CFG_ADDR_V4OK) != 0) {
cfg_print_cstr(pctx, "<ipv4_address>");