[alsa-devel] [PATCH 6/7] topology: Add support for parsing vendor tuples

Mengdong Lin mengdong.lin at linux.intel.com
Wed Mar 30 09:15:52 CEST 2016



On 03/29/2016 10:13 PM, Takashi Iwai wrote:
> On Thu, 24 Mar 2016 04:07:36 +0100,
> mengdong.lin at linux.intel.com wrote:
>>
>> +static int parse_tuple_set(snd_tplg_t *tplg, snd_config_t *cfg,
>> +	struct tplg_tuple_set **s)
> ....
>> +		switch (type) {
>> +		case SND_SOC_TPLG_TUPLE_TYPE_UUID:
>> +			memcpy(tuple->uuid, value, 16);
>
> This may become out-of-bound access.  Check the size of value string
> beforehand.

I'll fix this in v2.

>
>> +			tplg_dbg("\t\t%s = %s\n", tuple->token, tuple->uuid);
>> +			break;
>> +
>> +		case SND_SOC_TPLG_TUPLE_TYPE_STRING:
>> +			elem_copy_text(tuple->string, value,
>> +				SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
>> +			tplg_dbg("\t\t%s = %s\n", tuple->token, tuple->string);
>> +			break;
>> +
>> +		case SND_SOC_TPLG_TUPLE_TYPE_BOOL:
>> +			if (strcmp(value, "true") == 0)
>> +				tuple->value = 1;
>> +			tplg_dbg("\t\t%s = %d\n", tuple->token, tuple->value);
>> +			break;
>> +
>> +		case SND_SOC_TPLG_TUPLE_TYPE_BYTE:
>> +		case SND_SOC_TPLG_TUPLE_TYPE_SHORT:
>> +		case SND_SOC_TPLG_TUPLE_TYPE_WORD:
>> +			tuple->value = atoi(value);
>
> atoi() isn't good enough.  It can't handle a hex number, for example,
> and can't give an error.

Sorry. I missed this. I'll use strtol() to handle the data and check on 
the return value.

>> +/* Free handler of tuples */
>> +void tplg_free_tuples(void *obj)
>> +{
>> +	struct tplg_vendor_tuples *tuples = (struct tplg_vendor_tuples *)obj;
>> +	int i;
>> +
>> +	if (!tuples)
>> +		return;
>> +
>> +	for (i = 0; i < tuples->num_sets; i++)
>> +		free(tuples->set[i]);
>> +}
>
> tuples->set itself isn't freed?

This a memory leak. I'll fix this.

Thanks again for your review. I've sent out v2 with the fixes.

Regards
Mengdong


More information about the Alsa-devel mailing list