From 76c19624d85364e73909d4c93913af5d482d839c Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 3 May 2013 02:56:04 +0200 Subject: [PATCH] Made PCX Loader exception-safe Former-commit-id: aca42c27d8daa6b0c5412bd61c5fad3016bcd6d0 --- src/Nazara/Utility/Loaders/PCX/Loader.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/Nazara/Utility/Loaders/PCX/Loader.cpp b/src/Nazara/Utility/Loaders/PCX/Loader.cpp index d24babbd8..79fdbd3ca 100644 --- a/src/Nazara/Utility/Loaders/PCX/Loader.cpp +++ b/src/Nazara/Utility/Loaders/PCX/Loader.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include // Auteur du loader original : David Henry @@ -149,18 +150,18 @@ namespace case 4: { - nzUInt8* colorIndex = new nzUInt8[width]; - nzUInt8* line = new nzUInt8[header.bytesPerScanLine]; + std::unique_ptr colorIndex(new nzUInt8[width]); + std::unique_ptr line(new nzUInt8[header.bytesPerScanLine]); for (unsigned int y = 0; y < height; ++y) { nzUInt8* ptr = &pixels[y * width * 3]; - std::memset(colorIndex, 0, width); + std::memset(colorIndex.get(), 0, width); for (unsigned int c = 0; c < 4; ++c) { - nzUInt8* pLine = line; + nzUInt8* pLine = line.get(); int bytes = header.bytesPerScanLine; /* decode line number y */ @@ -171,9 +172,6 @@ namespace if (!stream.Read(&rle_value, 1)) { NazaraError("Failed to read stream (byte " + NzString::Number(stream.GetCursorPos()) + ')'); - delete[] colorIndex; - delete[] line; - return false; } @@ -185,9 +183,6 @@ namespace if (!stream.Read(&rle_value, 1)) { NazaraError("Failed to read stream (byte " + NzString::Number(stream.GetCursorPos()) + ')'); - delete[] colorIndex; - delete[] line; - return false; } } @@ -214,9 +209,6 @@ namespace } } - /* release memory */ - delete[] colorIndex; - delete[] line; break; }