diff --git a/main/sorcery.c b/main/sorcery.c
index 2f451961b955135da800fd9b511891f590619e7d..43a395ad0c946e6e847e03cd28a2b08df10e44af 100644
--- a/main/sorcery.c
+++ b/main/sorcery.c
@@ -1736,6 +1736,10 @@ void *ast_sorcery_alloc(const struct ast_sorcery *sorcery, const char *type, con
 	} else {
 		details->object->id = ast_strdup(id);
 	}
+	if (!details->object->id) {
+		ao2_ref(details, -1);
+		return NULL;
+	}
 
 	ast_copy_string(details->object->type, type, sizeof(details->object->type));