Browse Source

Fix invalid write in String::asBase64(), add tests

Signed-off-by: falkTX <falktx@falktx.com>
develop
falkTX 1 day ago
parent
commit
2cc2280fa0
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 46 additions and 7 deletions
  1. +1
    -1
      distrho/extra/String.hpp
  2. +36
    -0
      tests/Base64.cpp
  3. +1
    -1
      tests/Makefile
  4. +8
    -5
      tests/tests.hpp

+ 1
- 1
distrho/extra/String.hpp View File

@@ -699,7 +699,7 @@ public:
char* strBuf = static_cast<char*>(std::malloc(strBufSize)); char* strBuf = static_cast<char*>(std::malloc(strBufSize));
DISTRHO_SAFE_ASSERT_RETURN(strBuf != nullptr, String()); DISTRHO_SAFE_ASSERT_RETURN(strBuf != nullptr, String());


strBuf[strBufSize] = '\0';
strBuf[strBufSize - 1] = '\0';
size_t strBufIndex = 0; size_t strBufIndex = 0;


const uchar* bytesToEncode = static_cast<const uchar*>(data); const uchar* bytesToEncode = static_cast<const uchar*>(data);


+ 36
- 0
tests/Base64.cpp View File

@@ -0,0 +1,36 @@
/*
* DISTRHO Plugin Framework (DPF)
* Copyright (C) 2012-2025 Filipe Coelho <falktx@falktx.com>
*
* Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this
* permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#define HEADLESS_TESTS
#include "tests.hpp"
#include "distrho/extra/Base64.hpp"
#include "distrho/extra/String.hpp"

// --------------------------------------------------------------------------------------------------------------------

int main()
{
using namespace DISTRHO_NAMESPACE;

String test("This is a test");
std::vector<uint8_t> testblob(test.buffer(), test.buffer() + (test.length() + 1));
std::vector<uint8_t> blob = d_getChunkFromBase64String(String::asBase64(test.buffer(), test.length() + 1));
DISTRHO_ASSERT_EQUAL(blob, testblob, "encode + decode must match original data");

return 0;
}

// --------------------------------------------------------------------------------------------------------------------

+ 1
- 1
tests/Makefile View File

@@ -24,7 +24,7 @@ endif
# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------


MANUAL_TESTS = MANUAL_TESTS =
UNIT_TESTS = Color Point
UNIT_TESTS = Base64 Color Point


ifeq ($(HAVE_CAIRO),true) ifeq ($(HAVE_CAIRO),true)
MANUAL_TESTS += Demo.cairo MANUAL_TESTS += Demo.cairo


+ 8
- 5
tests/tests.hpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Plugin Framework (DPF) * DISTRHO Plugin Framework (DPF)
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2025 Filipe Coelho <falktx@falktx.com>
* *
* Permission to use, copy, modify, and/or distribute this software for any purpose with * Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this * or without fee is hereby granted, provided that the above copyright notice and this
@@ -16,10 +16,6 @@


#pragma once #pragma once


#include "dgl/Application.hpp"

#include "distrho/extra/Thread.hpp"

#define DISTRHO_ASSERT_EQUAL(v1, v2, msg) \ #define DISTRHO_ASSERT_EQUAL(v1, v2, msg) \
if (v1 != v2) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; } if (v1 != v2) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; }


@@ -29,6 +25,11 @@
#define DISTRHO_ASSERT_SAFE_EQUAL(v1, v2, msg) \ #define DISTRHO_ASSERT_SAFE_EQUAL(v1, v2, msg) \
if (d_isNotEqual(v1, v2)) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; } if (d_isNotEqual(v1, v2)) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; }


#ifndef HEADLESS_TESTS

#include "dgl/Application.hpp"
#include "distrho/extra/Thread.hpp"

START_NAMESPACE_DGL START_NAMESPACE_DGL


// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------
@@ -59,3 +60,5 @@ private:
// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------


END_NAMESPACE_DGL END_NAMESPACE_DGL

#endif

Loading…
Cancel
Save