Skip to content

Commit 84f7638

Browse files
committed
Fixed different behaviour when UDP messages contain \0 characters
1 parent 288b39f commit 84f7638

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

DebugView++Lib/SocketReader.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@
1313
namespace fusion {
1414
namespace debugviewpp {
1515

16-
// todo: initialize these members ?
17-
//WSAOVERLAPPED m_overlapped;
18-
//WSABUF m_wsaBuf[1];
19-
//sockaddr_in m_from;
20-
2116
SocketReader::SocketReader(Timer& timer, ILineBuffer& lineBuffer, int port) :
2217
LogSource(timer, SourceType::Udp, lineBuffer),
2318
m_wsa(2, 2),
@@ -44,12 +39,18 @@ HANDLE SocketReader::GetHandle() const
4439
return m_event.get();
4540
}
4641

42+
std::string bufferToString(const char* buffer, int size)
43+
{
44+
size_t length = strnlen(buffer, size);
45+
return std::string(buffer, length);
46+
}
47+
4748
void SocketReader::Notify()
4849
{
4950
if (m_busy)
5051
{
5152
int len = CompleteReceive();
52-
Add(0, GetProcessText(), std::string(m_buffer.data(), len));
53+
Add(0, GetProcessText(), bufferToString(m_buffer.data(), len));
5354
}
5455

5556
for (;;)
@@ -59,7 +60,7 @@ void SocketReader::Notify()
5960
{
6061
return;
6162
}
62-
Add(0, GetProcessText(), std::string(m_buffer.data(), len));
63+
Add(0, GetProcessText(), bufferToString(m_buffer.data(), len));
6364
}
6465
}
6566

include/DebugView++Lib/SocketReader.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class SocketReader : public LogSource
3434
Win32::Socket m_socket;
3535
Win32::Handle m_event;
3636
std::array<char, 2000> m_buffer;
37-
WSAOVERLAPPED m_overlapped;
38-
WSABUF m_wsaBuf[1];
39-
sockaddr_in m_from;
37+
WSAOVERLAPPED m_overlapped = WSAOVERLAPPED();
38+
WSABUF m_wsaBuf[1]{};
39+
sockaddr_in m_from = sockaddr_in();
4040
int m_fromLen;
4141
bool m_busy;
4242
};

0 commit comments

Comments
 (0)