Skip to content

Commit 0d031fb

Browse files
committed
Update Bluewing Server to build 31 (Unix fixes)
Fixed several issues. • Fixed crash in lw_addr_clone() when strdup()'ng potentially null pointer. This is undefined behaviour. Windows seems to dup null into null as its undefined behaviour, hiding this bug so far. • Unix server sockets were blocking, making the accept loop freeze on second iteration after a connect, rather than aborting due to the "would block" error. • Unix udp sockets were blocking too, making the read loop freeze after all pending data was read, rather than abort due to the "would block" error. • Removed Windows/Unix socket and pump watch variables from server struct, as they were already kept within struct variables contained within the server struct. These edits will be copied into MMF2Exts repo after this, possibly fixing Bluewing Server Android/iOS extension ports.
1 parent eb80ed1 commit 0d031fb

File tree

6 files changed

+20
-19
lines changed

6 files changed

+20
-19
lines changed

Lacewing/Lacewing.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1924,7 +1924,7 @@ struct codepointsallowlist {
19241924
struct relayserverinternal;
19251925
struct relayserver
19261926
{
1927-
static const int buildnum = 30;
1927+
static const int buildnum = 31;
19281928

19291929
void * internaltag, * tag = nullptr;
19301930

Lacewing/src/address.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ lw_addr lw_addr_clone (lw_addr ctx)
196196

197197
memcpy (addr->service, ctx->service, sizeof (ctx->service));
198198

199-
addr->hostname = addr->hostname_to_free = strdup(ctx->hostname);
199+
addr->hostname = addr->hostname_to_free = ctx->hostname ? strdup(ctx->hostname) : NULL;
200200

201201
return addr;
202202
}

Lacewing/src/unix/server.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,6 @@ struct _lw_server_client
8585

8686
lw_addr address;
8787

88-
int fd;
89-
lw_pump_watch watch;
90-
9188
lw_server_client * elem;
9289
};
9390

@@ -172,9 +169,9 @@ lw_server lw_server_new (lw_pump pump)
172169
ctx->pump = pump;
173170

174171
#ifdef _lacewing_npn
175-
lwp_trace ("NPN is available\n");
172+
lwp_trace ("NPN is available");
176173
#else
177-
lwp_trace ("NPN is NOT available\n");
174+
lwp_trace ("NPN is NOT available");
178175
#endif
179176

180177
ctx->socket = -1;
@@ -257,6 +254,8 @@ static void listen_socket_read_ready (void * tag)
257254
if (lwp_release (client, "on_connect") ||
258255
((lw_stream) ctx)->flags & lwp_stream_flag_dead)
259256
{
257+
if (ctx->on_disconnect)
258+
ctx->on_disconnect(ctx, client);
260259
/* Client was deleted by connect hook
261260
*/
262261
return;
@@ -330,6 +329,8 @@ void lw_server_host_filter (lw_server ctx, lw_filter filter)
330329
return;
331330
}
332331

332+
lwp_make_nonblocking(ctx->socket);
333+
333334
lw_pump_add (ctx->pump, ctx->socket, ctx, listen_socket_read_ready, 0, lw_true);
334335

335336
lw_error_delete (error);
@@ -570,9 +571,9 @@ void on_client_close (lw_stream stream, void * tag)
570571

571572
lw_server ctx = client->server;
572573

573-
lwp_trace ("Close %d", client->fd);
574+
lwp_trace ("Close %d", client->fdstream.fd);
574575

575-
client->fd = -1;
576+
client->fdstream.fd = -1;
576577

577578
if (client->on_connect_called)
578579
{

Lacewing/src/unix/udp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ void lw_udp_host_filter (lw_udp ctx, lw_filter filter)
139139

140140
lw_error_delete (error);
141141

142+
lwp_make_nonblocking(ctx->fd);
143+
142144
ctx->filter = lw_filter_clone (filter);
143145

144146
ctx->pump_watch = lw_pump_add (ctx->pump, ctx->fd, ctx, read_ready, 0, lw_true);

Lacewing/src/windows/server.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ struct _lw_server_client
8282
When looking up string representation make sure to check. */
8383
lw_addr addr;
8484

85-
HANDLE socket;
86-
8785
lw_server_client * elem;
8886

8987
/* TODO: don't include this for non SSL clients

bluewing-cpp-server-linux.vcxproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@
231231
</ItemGroup>
232232
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
233233
<ClCompile>
234-
<PreprocessorDefinitions>_lacewing_static;_DEBUG;_lacewing_debug=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
234+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
235235
<CppLanguageStandard>c++17</CppLanguageStandard>
236236
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
237237
<CompileAs>CompileAsCpp</CompileAs>
@@ -242,7 +242,7 @@
242242
</ItemDefinitionGroup>
243243
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
244244
<ClCompile>
245-
<PreprocessorDefinitions>_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
245+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
246246
<CppLanguageStandard>c++17</CppLanguageStandard>
247247
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
248248
<CompileAs>CompileAsCpp</CompileAs>
@@ -253,7 +253,7 @@
253253
</ItemDefinitionGroup>
254254
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
255255
<ClCompile>
256-
<PreprocessorDefinitions>_lacewing_static;_DEBUG;_lacewing_debug=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
256+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
257257
<CppLanguageStandard>c++17</CppLanguageStandard>
258258
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
259259
<CompileAs>CompileAsCpp</CompileAs>
@@ -264,7 +264,7 @@
264264
</ItemDefinitionGroup>
265265
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
266266
<ClCompile>
267-
<PreprocessorDefinitions>_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
267+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
268268
<CppLanguageStandard>c++17</CppLanguageStandard>
269269
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
270270
<CompileAs>CompileAsCpp</CompileAs>
@@ -275,7 +275,7 @@
275275
</ItemDefinitionGroup>
276276
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
277277
<ClCompile>
278-
<PreprocessorDefinitions>_lacewing_static;_DEBUG;_lacewing_debug=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
278+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
279279
<CppLanguageStandard>c++17</CppLanguageStandard>
280280
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
281281
<CompileAs>CompileAsCpp</CompileAs>
@@ -286,7 +286,7 @@
286286
</ItemDefinitionGroup>
287287
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
288288
<ClCompile>
289-
<PreprocessorDefinitions>_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
289+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
290290
<CppLanguageStandard>c++17</CppLanguageStandard>
291291
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
292292
<CompileAs>CompileAsCpp</CompileAs>
@@ -297,7 +297,7 @@
297297
</ItemDefinitionGroup>
298298
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
299299
<ClCompile>
300-
<PreprocessorDefinitions>_lacewing_static;_DEBUG;_lacewing_debug=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
300+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
301301
<CppLanguageStandard>c++17</CppLanguageStandard>
302302
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
303303
<CompileAs>CompileAsCpp</CompileAs>
@@ -308,7 +308,7 @@
308308
</ItemDefinitionGroup>
309309
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
310310
<ClCompile>
311-
<PreprocessorDefinitions>_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
311+
<PreprocessorDefinitions>PROJECT_NAME="$(ProjectName)";_lacewing_static;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
312312
<CppLanguageStandard>c++17</CppLanguageStandard>
313313
<AdditionalOptions>-Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>
314314
<CompileAs>CompileAsCpp</CompileAs>

0 commit comments

Comments
 (0)