From 573be24269d57805dee36881950767241d815c51 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 1 Dec 2022 20:03:13 +0100 Subject: [PATCH] [wsi] Fix crash when parsing EDID fails If info is null then we shouldn't pass it around. Also improve formatting a bit. --- src/wsi/wsi_edid.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/wsi/wsi_edid.cpp b/src/wsi/wsi_edid.cpp index 792f19aac..6a716a037 100644 --- a/src/wsi/wsi_edid.cpp +++ b/src/wsi/wsi_edid.cpp @@ -16,8 +16,9 @@ namespace dxvk::wsi { WsiDisplayMetadata metadata = {}; di_info* info = di_info_parse_edid(edidData.data(), edidData.size()); + if (!info) { - Logger::err(str::format("wsi: parseColorimetryInfo: Failed to get parse edid. Reason: ", di_info_get_failure_msg(info))); + Logger::err(str::format("wsi: parseColorimetryInfo: Failed to get parse edid.")); return std::nullopt; } @@ -28,15 +29,14 @@ namespace dxvk::wsi { const di_cta_colorimetry_block* colorimetry = nullptr; const di_edid_cta* cta = nullptr; - const di_edid_ext* const* exts = di_edid_get_extensions(edid); - for (; *exts != nullptr; exts++) { + + for (auto exts = di_edid_get_extensions(edid); *exts != nullptr; exts++) { if ((cta = di_edid_ext_get_cta(*exts))) break; } if (cta) { - const di_cta_data_block* const* blocks = di_edid_cta_get_data_blocks(cta); - for (; *blocks != nullptr; blocks++) { + for (auto blocks = di_edid_cta_get_data_blocks(cta); *blocks != nullptr; blocks++) { if ((hdr_static_metadata = di_cta_data_block_get_hdr_static_metadata(*blocks))) continue; if ((colorimetry = di_cta_data_block_get_colorimetry(*blocks))) @@ -61,13 +61,10 @@ namespace dxvk::wsi { metadata.maxLuminance = hdr_static_metadata->desired_content_max_luminance; } - metadata.supportsST2084 = - chroma && - colorimetry && colorimetry->bt2020_rgb && + metadata.supportsST2084 = chroma && colorimetry && colorimetry->bt2020_rgb && hdr_static_metadata && hdr_static_metadata->eotfs && hdr_static_metadata->eotfs->pq; di_info_destroy(info); - return metadata; }