From bd98490d9f0003037e769e4e0fe0cbab2e556034 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 20 Dec 2013 19:33:27 +0100 Subject: [PATCH] Made Sound class safier Former-commit-id: 4d75f94086b2bddcd84bed5b17204f99a3d78ef4 --- src/Nazara/Audio/Sound.cpp | 46 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/Nazara/Audio/Sound.cpp b/src/Nazara/Audio/Sound.cpp index 684b7ba0a..8f507afbc 100644 --- a/src/Nazara/Audio/Sound.cpp +++ b/src/Nazara/Audio/Sound.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -42,7 +43,7 @@ nzUInt32 NzSound::GetDuration() const #if NAZARA_AUDIO_SAFE if (!m_buffer) { - NazaraError("No sound buffer"); + NazaraError("Invalid sound buffer"); return 0; } #endif @@ -73,54 +74,51 @@ bool NzSound::IsLooping() const bool NzSound::LoadFromFile(const NzString& filePath, const NzSoundBufferParams& params) { - NzSoundBuffer* buffer = new NzSoundBuffer; + std::unique_ptr buffer(new NzSoundBuffer); + buffer->SetPersistent(false); + if (!buffer->LoadFromFile(filePath, params)) { NazaraError("Failed to load buffer from file (" + filePath + ')'); - delete buffer; - return false; } - SetBuffer(buffer); - - buffer->SetPersistent(false); + SetBuffer(buffer.get()); + buffer.release(); return true; } bool NzSound::LoadFromMemory(const void* data, std::size_t size, const NzSoundBufferParams& params) { - NzSoundBuffer* buffer = new NzSoundBuffer; + std::unique_ptr buffer(new NzSoundBuffer); + buffer->SetPersistent(false); + if (!buffer->LoadFromMemory(data, size, params)) { NazaraError("Failed to load buffer from memory (" + NzString::Pointer(data) + ')'); - delete buffer; - return false; } - SetBuffer(buffer); - - buffer->SetPersistent(false); + SetBuffer(buffer.get()); + buffer.release(); return true; } bool NzSound::LoadFromStream(NzInputStream& stream, const NzSoundBufferParams& params) { - NzSoundBuffer* buffer = new NzSoundBuffer; + std::unique_ptr buffer(new NzSoundBuffer); + buffer->SetPersistent(false); + if (!buffer->LoadFromStream(stream, params)) { NazaraError("Failed to load buffer from stream"); - delete buffer; - return false; } - SetBuffer(buffer); - - buffer->SetPersistent(false); + SetBuffer(buffer.get()); + buffer.release(); return true; } @@ -135,7 +133,7 @@ bool NzSound::Play() #if NAZARA_AUDIO_SAFE if (!m_buffer) { - NazaraError("No sound buffer to play"); + NazaraError("Invalid sound buffer"); return false; } #endif @@ -147,6 +145,14 @@ bool NzSound::Play() void NzSound::SetBuffer(const NzSoundBuffer* buffer) { + #if NAZARA_AUDIO_SAFE + if (buffer && !buffer->IsValid()) + { + NazaraError("Invalid sound buffer"); + return; + } + #endif + if (m_buffer == buffer) return;