@@ -356,10 +356,15 @@ int iio_attr_get_range(const struct iio_attr *attr, double *min, double *step, d
356356 if (!string_ends_with (iio_attr_get_name (attr ), "available" ))
357357 return - ENXIO ;
358358
359- char buf [MAX_ATTR_VALUE ];
360- ret = iio_attr_read_raw (attr , buf , sizeof (buf ));
361- if (ret < 0 )
359+ char * buf = malloc (MAX_ATTR_VALUE );
360+ if (!buf )
361+ return - ENOMEM ;
362+
363+ ret = iio_attr_read_raw (attr , buf , MAX_ATTR_VALUE );
364+ if (ret < 0 ) {
365+ free (buf );
362366 return (int ) ret ;
367+ }
363368
364369 // Expect format: [min step max]
365370#if defined(_MSC_VER )
@@ -373,9 +378,11 @@ int iio_attr_get_range(const struct iio_attr *attr, double *min, double *step, d
373378 * step = lstep ;
374379 * max = lmax ;
375380 } else {
381+ free (buf );
376382 return - EOPNOTSUPP ;
377383 }
378384
385+ free (buf );
379386 return 0 ;
380387}
381388
@@ -402,17 +409,26 @@ int iio_attr_get_available(const struct iio_attr *attr, char ***list, size_t *co
402409 if (!string_ends_with (iio_attr_get_name (attr ), "available" ))
403410 return - ENXIO ;
404411
405- char buf [MAX_ATTR_VALUE ];
406- ret = (int )iio_attr_read_raw (attr , buf , sizeof (buf ));
407- if (ret < 0 )
412+ char * buf = malloc (MAX_ATTR_VALUE );
413+ if (!buf )
414+ return - ENOMEM ;
415+
416+ ret = (int )iio_attr_read_raw (attr , buf , MAX_ATTR_VALUE );
417+ if (ret < 0 ) {
418+ free (buf );
408419 return ret ;
420+ }
409421
410- if (buf [0 ] == '[' )
422+ if (buf [0 ] == '[' ) {
423+ free (buf );
411424 return - EOPNOTSUPP ;
425+ }
412426
413427 local_list = malloc (capacity * sizeof (char * ));
414- if (!local_list )
428+ if (!local_list ) {
429+ free (buf );
415430 return - ENOMEM ;
431+ }
416432
417433 char * token = iio_strtok_r (buf , " \n" , & saveptr );
418434 while (token ) {
@@ -425,6 +441,7 @@ int iio_attr_get_available(const struct iio_attr *attr, char ***list, size_t *co
425441 for (; i < n ; ++ i )
426442 free (local_list [i ]);
427443 free (local_list );
444+ free (buf );
428445 return - ENOMEM ;
429446 }
430447 local_list = tmp ;
@@ -433,6 +450,8 @@ int iio_attr_get_available(const struct iio_attr *attr, char ***list, size_t *co
433450 token = iio_strtok_r (NULL , " \n" , & saveptr );
434451 }
435452
453+ free (buf );
454+
436455 * list = local_list ;
437456 * count = n ;
438457
0 commit comments