From a5e4cd780e50ec2bdc1de8a44fad09e2d7ce311b Mon Sep 17 00:00:00 2001 From: Aryan Salmanpour Date: Thu, 4 Sep 2025 12:03:08 -0700 Subject: [PATCH] Fix a memory leak for rocDecodeNegativeTests (#643) --- .../rocdecode_api_negative_tests.cpp | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/rocDecodeNegativeApiTests/rocdecode_api_negative_tests.cpp b/test/rocDecodeNegativeApiTests/rocdecode_api_negative_tests.cpp index 1d021c6b78..8b0098b339 100644 --- a/test/rocDecodeNegativeApiTests/rocdecode_api_negative_tests.cpp +++ b/test/rocDecodeNegativeApiTests/rocdecode_api_negative_tests.cpp @@ -45,6 +45,11 @@ int RocDecodeApiNegativeTests::TestInvalidCreateDecoder() { std::cerr << "Expected ROCDEC_INVALID_PARAMETER but got " << rocDecGetErrorName(rocdecode_status) << std::endl; return EXIT_FAILURE; } + rocdecode_status = rocDecDestroyDecoder(decoder_handle_); + if (rocdecode_status != ROCDEC_SUCCESS) { + std::cerr << "Expected ROCDEC_SUCCESS but got " << rocDecGetErrorName(rocdecode_status) << std::endl; + return EXIT_FAILURE; + } // Scenario 3: Pass invalid device_id in decoder_create_info decoder_create_info_.device_id = 255; // Assuming 255 is an invalid device ID @@ -54,6 +59,11 @@ int RocDecodeApiNegativeTests::TestInvalidCreateDecoder() { std::cerr << "Expected ROCDEC_NOT_SUPPORTED but got " << rocDecGetErrorName(rocdecode_status) << std::endl; return EXIT_FAILURE; } + rocdecode_status = rocDecDestroyDecoder(decoder_handle_); + if (rocdecode_status != ROCDEC_SUCCESS) { + std::cerr << "Expected ROCDEC_SUCCESS but got " << rocDecGetErrorName(rocdecode_status) << std::endl; + return EXIT_FAILURE; + } // Scenario 4: Pass zero width and height in decoder_create_info decoder_create_info_.device_id = 0; // Reset to valid device ID @@ -64,6 +74,11 @@ int RocDecodeApiNegativeTests::TestInvalidCreateDecoder() { std::cerr << "Expected ROCDEC_NOT_SUPPORTED but got " << rocDecGetErrorName(rocdecode_status) << std::endl; return EXIT_FAILURE; } + rocdecode_status = rocDecDestroyDecoder(decoder_handle_); + if (rocdecode_status != ROCDEC_SUCCESS) { + std::cerr << "Expected ROCDEC_SUCCESS but got " << rocDecGetErrorName(rocdecode_status) << std::endl; + return EXIT_FAILURE; + } // Scenario 5: Pass unsupported codec type decoder_create_info_.width = 1920; @@ -74,6 +89,11 @@ int RocDecodeApiNegativeTests::TestInvalidCreateDecoder() { std::cerr << "Expected ROCDEC_NOT_SUPPORTED but got " << rocDecGetErrorName(rocdecode_status) << std::endl; return EXIT_FAILURE; } + rocdecode_status = rocDecDestroyDecoder(decoder_handle_); + if (rocdecode_status != ROCDEC_SUCCESS) { + std::cerr << "Expected ROCDEC_SUCCESS but got " << rocDecGetErrorName(rocdecode_status) << std::endl; + return EXIT_FAILURE; + } // Scenario 6: Pass unsupported chroma_format decoder_create_info_.codec_type = rocDecVideoCodec_HEVC; @@ -83,6 +103,11 @@ int RocDecodeApiNegativeTests::TestInvalidCreateDecoder() { std::cerr << "Expected ROCDEC_NOT_SUPPORTED but got " << rocDecGetErrorName(rocdecode_status) << std::endl; return EXIT_FAILURE; } + rocdecode_status = rocDecDestroyDecoder(decoder_handle_); + if (rocdecode_status != ROCDEC_SUCCESS) { + std::cerr << "Expected ROCDEC_SUCCESS but got " << rocDecGetErrorName(rocdecode_status) << std::endl; + return EXIT_FAILURE; + } // Scenario 7: Pass unsupported bit_depth decoder_create_info_.chroma_format = rocDecVideoChromaFormat_420; @@ -92,6 +117,11 @@ int RocDecodeApiNegativeTests::TestInvalidCreateDecoder() { std::cerr << "Expected ROCDEC_NOT_SUPPORTED but got " << rocDecGetErrorName(rocdecode_status) << std::endl; return EXIT_FAILURE; } + rocdecode_status = rocDecDestroyDecoder(decoder_handle_); + if (rocdecode_status != ROCDEC_SUCCESS) { + std::cerr << "Expected ROCDEC_SUCCESS but got " << rocDecGetErrorName(rocdecode_status) << std::endl; + return EXIT_FAILURE; + } // Create a valid decoder_handle - This step ensures a valid decoder_handle_ is available for subsequent negative testing of other rocDecode APIs. decoder_create_info_.bit_depth_minus_8 = 2;