audio: hal and post_proc KW and misc fixes
- KWBUG-811 fixes for NULL check and correct
pointer dereferece in HAL and post_proc
- KWBUG-813, KWBUG-883 fixes for strtok,
strcpy, strncpy strcat, strncat etc.
Conflicts:
hal/audio_extn/utils.c
hal/msm8974/platform.c
post_proc/effect_api.c
Change-Id: I1a9626a7951aa3d54fb2d92a9167e5f92b5f523f
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 82b596f..fe0d7ea 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -134,14 +134,15 @@
static audio_output_flags_t parse_flag_names(char *name)
{
uint32_t flag = 0;
- char *flag_name = strtok(name, "|");
+ char *last_r;
+ char *flag_name = strtok_r(name, "|", &last_r);
while (flag_name != NULL) {
if (strlen(flag_name) != 0) {
flag |= string_to_enum(s_flag_name_to_enum_table,
ARRAY_SIZE(s_flag_name_to_enum_table),
flag_name);
}
- flag_name = strtok(NULL, "|");
+ flag_name = strtok_r(NULL, "|", &last_r);
}
ALOGV("parse_flag_names: flag - %d", flag);
@@ -151,7 +152,8 @@
static void parse_format_names(char *name, struct streams_output_cfg *so_info)
{
struct stream_format *sf_info = NULL;
- char *str = strtok(name, "|");
+ char *last_r;
+ char *str = strtok_r(name, "|", &last_r);
if (str != NULL && strcmp(str, DYNAMIC_VALUE_TAG) == 0)
return;
@@ -169,7 +171,7 @@
sf_info->format = format;
list_add_tail(&so_info->format_list, &sf_info->list);
}
- str = strtok(NULL, "|");
+ str = strtok_r(NULL, "|", &last_r);
}
}
@@ -177,7 +179,8 @@
{
struct stream_sample_rate *ss_info = NULL;
uint32_t sample_rate = 48000;
- char *str = strtok(name, "|");
+ char *last_r;
+ char *str = strtok_r(name, "|", &last_r);
if (str != NULL && 0 == strcmp(str, DYNAMIC_VALUE_TAG))
return;
@@ -188,20 +191,22 @@
ALOGV("%s: sample_rate - %d", __func__, sample_rate);
if (0 != sample_rate) {
ss_info = (struct stream_sample_rate *)calloc(1, sizeof(struct stream_sample_rate));
- if (ss_info == NULL)
- break; /* return whatever was parsed */
-
+ if (!ss_info) {
+ ALOGE("%s: memory allocation failure", __func__);
+ return;
+ }
ss_info->sample_rate = sample_rate;
list_add_tail(&so_info->sample_rate_list, &ss_info->list);
}
- str = strtok(NULL, "|");
+ str = strtok_r(NULL, "|", &last_r);
}
}
static int parse_bit_width_names(char *name)
{
int bit_width = 16;
- char *str = strtok(name, "|");
+ char *last_r;
+ char *str = strtok_r(name, "|", &last_r);
if (str != NULL && strcmp(str, DYNAMIC_VALUE_TAG))
bit_width = (int)strtol(str, (char **)NULL, 10);
@@ -213,7 +218,8 @@
static int parse_app_type_names(void *platform, char *name)
{
int app_type = platform_get_default_app_type(platform);
- char *str = strtok(name, "|");
+ char *last_r;
+ char *str = strtok_r(name, "|", &last_r);
if (str != NULL && strcmp(str, DYNAMIC_VALUE_TAG))
app_type = (int)strtol(str, (char **)NULL, 10);