summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuirong Wang <kuirongw@codeaurora.org>2016-02-16 16:34:08 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-04-05 23:16:37 -0700
commit354a07ccd238ef2982b91141047c019720f4bcdc (patch)
treea3fd6e9ecd7fa2446afaac322285550189dab6a5
parent0d92129d7299ee88e7ecc924b3493360e2f084e7 (diff)
downloadandroid_hardware_qcom_audio-354a07ccd238ef2982b91141047c019720f4bcdc.tar.gz
android_hardware_qcom_audio-354a07ccd238ef2982b91141047c019720f4bcdc.tar.bz2
android_hardware_qcom_audio-354a07ccd238ef2982b91141047c019720f4bcdc.zip
hal: Update to make code more reliable
Update to prevent the null pointer reference and re-align for string operation. Change-Id: Ic949aeeefb9fc113db826e273a89ecdf7d44c2da CRs-fixed: 975118
-rw-r--r--hal/audio_extn/source_track.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/hal/audio_extn/source_track.c b/hal/audio_extn/source_track.c
index 8bf4c67f..9b6fa0e5 100644
--- a/hal/audio_extn/source_track.c
+++ b/hal/audio_extn/source_track.c
@@ -261,6 +261,12 @@ static int parse_soundfocus_sourcetracking_keys(struct str_parms *parms)
int ret = 0, err;
char *kv_pairs = str_parms_to_str(parms);
+ if(kv_pairs == NULL) {
+ ret = -ENOMEM;
+ ALOGE("[%s] key-value pair is NULL",__func__);
+ goto done;
+ }
+
ALOGV_IF(kv_pairs != NULL, "%s: enter: %s", __func__, kv_pairs);
len = strlen(kv_pairs);
@@ -322,7 +328,8 @@ static int parse_soundfocus_sourcetracking_keys(struct str_parms *parms)
}
done:
- free(kv_pairs);
+ if (kv_pairs)
+ free(kv_pairs);
if(value != NULL)
free(value);
ALOGV("%s: returning bitmask = %d", __func__, ret);
@@ -442,8 +449,8 @@ static void send_soundfocus_sourcetracking_params(struct str_parms *reply,
if ((i >=4) && (sound_focus_data.start_angle[i] == 0xFFFF))
continue;
if (i)
- snprintf(value + strlen(value), MAX_STR_SIZE, ",");
- snprintf(value + strlen(value), MAX_STR_SIZE, "%d", sound_focus_data.start_angle[i]);
+ snprintf(value + strlen(value) - 1, MAX_STR_SIZE, ",");
+ snprintf(value + strlen(value) - 1, MAX_STR_SIZE, "%d", sound_focus_data.start_angle[i]);
}
str_parms_add_str(reply, AUDIO_PARAMETER_KEY_SOUND_FOCUS_START_ANGLES, value);
}
@@ -469,8 +476,8 @@ static void send_soundfocus_sourcetracking_params(struct str_parms *reply,
if ((i >=4) && (source_tracking_data.vad[i] == 0xFF))
continue;
if (i)
- snprintf(value + strlen(value), MAX_STR_SIZE, ",");
- snprintf(value + strlen(value), MAX_STR_SIZE, "%d", source_tracking_data.vad[i]);
+ snprintf(value + strlen(value) - 1, MAX_STR_SIZE, ",");
+ snprintf(value + strlen(value) - 1, MAX_STR_SIZE, "%d", source_tracking_data.vad[i]);
}
str_parms_add_str(reply, AUDIO_PARAMETER_KEY_SOURCE_TRACK_VAD, value);
}
@@ -489,8 +496,8 @@ static void send_soundfocus_sourcetracking_params(struct str_parms *reply,
if (bitmask & BITMASK_AUDIO_PARAMETER_KEY_SOURCE_TRACK_POLAR_ACTIVITY) {
for (i = 0; i < 360; i++) {
if (i)
- snprintf(value + strlen(value), MAX_STR_SIZE, ",");
- snprintf(value + strlen(value), MAX_STR_SIZE, "%d", source_tracking_data.polar_activity[i]);
+ snprintf(value + strlen(value) - 1, MAX_STR_SIZE, ",");
+ snprintf(value + strlen(value) - 1, MAX_STR_SIZE, "%d", source_tracking_data.polar_activity[i]);
}
str_parms_add_str(reply, AUDIO_PARAMETER_KEY_SOURCE_TRACK_POLAR_ACTIVITY, value);
}
@@ -528,6 +535,12 @@ void audio_extn_source_track_set_parameters(struct audio_device *adev,
char *value = NULL;
char *kv_pairs = str_parms_to_str(parms);
+ if(kv_pairs == NULL) {
+ ret = -ENOMEM;
+ ALOGE("[%s] key-value pair is NULL",__func__);
+ goto done;
+ }
+
len = strlen(kv_pairs);
value = (char*)calloc(len, sizeof(char));
if(value == NULL) {
@@ -632,7 +645,8 @@ void audio_extn_source_track_set_parameters(struct audio_device *adev,
}
done:
- free(kv_pairs);
+ if (kv_pairs)
+ free(kv_pairs);
if(value != NULL)
free(value);
return;