Skip to content

Commit 16d41e8

Browse files
committed
aplay/mixer: restricting senders - check err
also workarounds for CIDs 47049{6,7}
1 parent e62773d commit 16d41e8

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

src/audio/playback/mixer.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ struct state_audio_mixer final {
290290
struct socket_udp_local *recv_socket{};
291291
string audio_codec{"PCM"};
292292
sockaddr_storage
293-
only_sender; ///< if !AF_UNSPEC, use stream just from this sender
293+
only_sender{}; ///< if !AF_UNSPEC, use stream just from this sender
294294
private:
295295
struct module mod;
296296
thread thread_id;
@@ -330,14 +330,22 @@ state_audio_mixer::check_messages()
330330
MSG(INFO, "flushing the address restriction (defaulting to mix all)\n");
331331
only_sender.ss_family = AF_UNSPEC;
332332
} else {
333-
MSG(INFO, "restricting mixer to: %s\n", val);
334-
only_sender = get_sockaddr(val, 0);
335-
if (participants.find(only_sender) ==
336-
participants.end()) {
337-
MSG(WARNING,
338-
"The requested participant %s is not yet "
339-
"present...\n",
340-
val);
333+
struct sockaddr_storage ss = get_sockaddr(val, 0);
334+
if (ss.ss_family != AF_UNSPEC) {
335+
MSG(INFO, "restricting mixer to: %s\n", val);
336+
only_sender = ss;
337+
if (participants.find(only_sender) ==
338+
participants.end()) {
339+
MSG(WARNING,
340+
"The requested participant %s is "
341+
"not yet present...\n", val);
342+
}
343+
} else {
344+
MSG(ERROR, "Wrong addr spec: %s\n", val);
345+
free_message(msg,
346+
new_response(RESPONSE_BAD_REQUEST,
347+
nullptr));
348+
continue;
341349
}
342350
}
343351

src/utils/net.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,11 +477,10 @@ get_sockaddr_str(const struct sockaddr *sa, unsigned sa_len, char *buf,
477477
struct sockaddr_storage
478478
get_sockaddr(const char *hostport, int mode)
479479
{
480-
struct sockaddr_storage ret;
480+
struct sockaddr_storage ret = { .ss_family = AF_UNSPEC };
481481
socklen_t socklen_unused = 0;
482482
char host[STR_LEN];
483483

484-
ret.ss_family = AF_UNSPEC;
485484
const char *const rightmost_colon = strrchr(hostport, ':');
486485
if (rightmost_colon == NULL) {
487486
MSG(ERROR, "Address %s not in format host:port!\n", hostport);

0 commit comments

Comments
 (0)