Skip to content

Commit 2136d6c

Browse files
committed
hardening: safer strncpy
1 parent 2a1e5da commit 2136d6c

2 files changed

Lines changed: 15 additions & 6 deletions

File tree

src/ZeDMD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ ZEDMDAPI void ZeDMD_SetLogCallback(ZeDMD* pZeDMD, ZeDMD_LogCallback callback, co
945945

946946
ZEDMDAPI const char* ZeDMD_FormatLogMessage(const char* format, va_list args, const void* pUserData)
947947
{
948-
char buffer[1024];
948+
static thread_local char buffer[1024];
949949
vsnprintf(buffer, sizeof(buffer), format, args);
950950

951951
return buffer;

src/ZeDMDComm.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -338,19 +338,28 @@ bool ZeDMDComm::IsQueueEmpty()
338338

339339
void ZeDMDComm::IgnoreDevice(const char* ignore_device)
340340
{
341-
if (sizeof(ignore_device) < 32 && m_ignoredDevicesCounter < 10)
341+
if (!ignore_device || m_ignoredDevicesCounter >= 10)
342342
{
343-
strcpy(&m_ignoredDevices[m_ignoredDevicesCounter++][0], ignore_device);
343+
return;
344344
}
345+
346+
const size_t maxLen = sizeof(m_ignoredDevices[0]) - 1;
347+
strncpy(&m_ignoredDevices[m_ignoredDevicesCounter][0], ignore_device, maxLen);
348+
m_ignoredDevices[m_ignoredDevicesCounter][maxLen] = '\0';
349+
++m_ignoredDevicesCounter;
345350
}
346351

347352
void ZeDMDComm::SetDevice(const char* device)
348353
{
349-
if (sizeof(device) < 32)
354+
if (!device)
350355
{
351-
strcpy(m_device, device);
352-
m_autoDetect = false;
356+
return;
353357
}
358+
359+
const size_t maxLen = sizeof(m_device) - 1;
360+
strncpy(m_device, device, maxLen);
361+
m_device[maxLen] = '\0';
362+
m_autoDetect = false;
354363
}
355364

356365
bool ZeDMDComm::Connect()

0 commit comments

Comments
 (0)