Go to file
Stephen Seo 2495396d76 Fix potential memory corruption bug
UDPC_atostr(...) uses a uint32_t as an offset into a buffer inside the
UDPC Context such that there can be at most 32 different addr-strings.
The call is thread-safe, up to a point (at most 32 concurrent calls will
return correct strings). The problem was that the offset was not being
reset to 0 and was always being incremented by 40. Should the offset
overflow, the offset into the buffer will be "mis-aligned" such that the
32nd offset into the buffer can possibly overwrite memory past the
buffer's end if the addr string is long enough.

The fix is to use a mutex instead of an atomic uint32_t to lock a
code-block that will always prevent overflow (using modulus operator).

I think the speed-loss is negligable (using a lock instead of an atomic
uint32_t) since it isn't expected for programs using UDPC to use
UDPC_atostr(...) very frequently.
2023-06-21 13:23:26 +09:00
.github/workflows Add gh-pages workflow for Doxygen documentation 2021-09-09 18:10:07 +09:00
src Fix potential memory corruption bug 2023-06-21 13:23:26 +09:00
.gitignore Update .gitignore 2021-08-30 12:07:27 +09:00
.gitmodules Remove unused TSQueue and RingBuffer 2019-11-06 14:42:35 +09:00
CMakeLists.txt Distinguish manual variables and pkgconf variables 2020-01-16 11:31:22 +09:00
Doxyfile Fix doxygen documentation 2020-01-13 19:22:08 +09:00
LICENSE Update LICENSE year 2023-04-18 14:05:52 +09:00
README.md Update README.md 2021-09-09 18:13:38 +09:00

UDPConnection

Provides a network connection over UDP, with verification of packet support via libsodium (optional). Implemented in C++ (up to C++11 standard), but is available via a C api, which should facilitate creating bindings for other programming languages if needed.

This library is still a work in progress, so api breaking changes may happen in the future.

Documentation

See the gh-pages generated Doxygen documentation here.

Compiling

Release builds

mkdir buildRelease
cd buildRelease
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_SHARED_LIBS=True ..
make
make DESTDIR=install_destination install

Debug builds

mkdir buildDebug
cd buildDebug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Usage

The program in src/test/UDPC_NetworkTest.c is used for testing UDPConnection and is also an example of using the library in a C program.

Debug Builds

NetworkTest only builds when CMAKE_BUILD_TYPE is Debug (default).

UnitTest only builds in Debug mode and if GTest (a unit testing framework) is available.

Links

https://github.com/Stephen-Seo/UDPConnection
https://git.seodisparate.com/stephenseo/UDPConnection