diff --git a/src/adb.h b/src/adb.h
index 10b46acbf995263a33932021c5fe4fa9ece260f1..a6bd121ad09f7016565fe246c71f242ffa3de696 100644
--- a/src/adb.h
+++ b/src/adb.h
@@ -272,13 +272,14 @@ struct adb_walk_gentext {
 	int key_printed : 1;
 };
 
+#define ADB_WALK_GENADB_MAX_IDB		2
 #define ADB_WALK_GENADB_MAX_NESTING	32
 #define ADB_WALK_GENADB_MAX_VALUES	100000
 
 struct adb_walk_genadb {
 	struct adb_walk d;
 	struct adb db;
-	struct adb idb[2];
+	struct adb idb[ADB_WALK_GENADB_MAX_IDB];
 	int nest, nestdb, num_vals;
 	struct adb_obj objs[ADB_WALK_GENADB_MAX_NESTING];
 	unsigned int curkey[ADB_WALK_GENADB_MAX_NESTING];
diff --git a/src/adb_walk_genadb.c b/src/adb_walk_genadb.c
index a15aa8216ad0d9be5d85cda0c2d37c47c7a314dd..06a3f9451933da273522322df14e1221b5a84e9e 100644
--- a/src/adb_walk_genadb.c
+++ b/src/adb_walk_genadb.c
@@ -43,6 +43,7 @@ static int adb_walk_genadb_start_object(struct adb_walk *d)
 
 	if (*adb_ro_kind(&dt->objs[dt->nest-1], dt->curkey[dt->nest-1]) == ADB_KIND_ADB) {
 		struct adb_adb_schema *schema = container_of(&dt->objs[dt->nest-1].schema->kind, struct adb_adb_schema, kind);
+		if (dt->nestdb >= ARRAY_SIZE(dt->idb)) return -E2BIG;
 		adb_reset(&dt->idb[dt->nestdb]);
 		dt->idb[dt->nestdb].hdr.schema = htole32(schema->schema_id);
 		dt->objs[dt->nest].db = &dt->idb[dt->nestdb];