diff options
author | Kuirong Wang <kuirongw@codeaurora.org> | 2016-02-16 16:34:08 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-04-05 23:16:37 -0700 |
commit | 354a07ccd238ef2982b91141047c019720f4bcdc (patch) | |
tree | a3fd6e9ecd7fa2446afaac322285550189dab6a5 | |
parent | 0d92129d7299ee88e7ecc924b3493360e2f084e7 (diff) | |
download | android_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.c | 30 |
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; |