aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinecrell <minecrell@minecrell.net>2020-04-23 18:15:57 +0200
committerMinecrell <minecrell@minecrell.net>2020-04-23 18:16:43 +0200
commit3f469bfc2c2b891d13a5236baa9b5ef1028f2389 (patch)
tree28b264d81184df7023830b2badaf26cff066c0dc
parent24ac96246da13b968c19fdee6da07a072031c9ba (diff)
tinyalsa: use strncpy instead of memcpy to copy string constant
memcpy() is arguably wrong when copying these string constants. The string constants will usually just be as long as necessary, so we might copy some random memory behind it and eventually crash. Use strncpy() instead to avoid copying characters after the null terminator. For some reason the strings in snd_ctl_card_info use unsigned chars, so we need a cast to char* to make it compile unfortunately... This fixes the following compile error on ppc64le: In function 'mixer_plug_get_card_info', inlined from 'mixer_plug_ioctl' at mixer_plugin.c:371:15: mixer_plugin.c:333:5: error: 'memcpy' forming offset [9, 16] is out of the bounds [0, 8] [-Werror=array-bounds] 333 | memcpy(card_info->id, "card_id", sizeof(card_info->id)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Not sure why that warning does not exist on other architectures.
-rw-r--r--src/mixer_plugin.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/mixer_plugin.c b/src/mixer_plugin.c
index 3437171..5bea42c 100644
--- a/src/mixer_plugin.c
+++ b/src/mixer_plugin.c
@@ -330,11 +330,11 @@ static int mixer_plug_get_card_info(struct mixer_plug_data *plug_data,
/*TODO: Fill card_info here from snd-card-def */
memset(card_info, 0, sizeof(*card_info));
card_info->card = plug_data->card;
- memcpy(card_info->id, "card_id", sizeof(card_info->id));
- memcpy(card_info->driver, "mymixer-so-name", sizeof(card_info->driver));
- memcpy(card_info->name, "card-name", sizeof(card_info->name));
- memcpy(card_info->longname, "card-name", sizeof(card_info->longname));
- memcpy(card_info->mixername, "mixer-name", sizeof(card_info->mixername));
+ strncpy((char*)card_info->id, "card_id", sizeof(card_info->id));
+ strncpy((char*)card_info->driver, "mymixer-so-name", sizeof(card_info->driver));
+ strncpy((char*)card_info->name, "card-name", sizeof(card_info->name));
+ strncpy((char*)card_info->longname, "card-name", sizeof(card_info->longname));
+ strncpy((char*)card_info->mixername, "mixer-name", sizeof(card_info->mixername));
return 0;
}