audio_io_test: Fix INTEGER_OVERFLOW defect 96/274096/3
authorSeungbae Shin <seungbae.shin@samsung.com>
Thu, 21 Apr 2022 07:37:23 +0000 (16:37 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Thu, 21 Apr 2022 14:14:37 +0000 (23:14 +0900)
[Version] 0.5.49
[Issue Type] Svace

Change-Id: I69a00dd9aa6d3151bd3a0a3f125ab5d69d254d6d

packaging/capi-media-audio-io.spec
test/audio_io_test.c

index 2887b11..4381a96 100644 (file)
@@ -1,6 +1,6 @@
 Name:           capi-media-audio-io
 Summary:        An Audio Input & Audio Output library in Tizen Native API
-Version:        0.5.48
+Version:        0.5.49
 Release:        0
 Group:          Multimedia/API
 License:        Apache-2.0
index efb54c4..3b77d22 100644 (file)
@@ -181,8 +181,8 @@ static void _play_file_sample_async(char *file, int frequency, int ch, int type)
 static void _play_file_sample_sync(char *file, int frequency, int ch, int type)
 {
        audio_out_h output;
-       int file_size = 0;
-       int read_bytes = 0;
+       long file_size = 0;
+       size_t read_bytes = 0;
        int buffer_size = 0;
        char *buf = NULL;
        FILE *fp = NULL;
@@ -201,14 +201,14 @@ static void _play_file_sample_sync(char *file, int frequency, int ch, int type)
        file_size = ftell(fp);
        fseek(fp, 0, SEEK_SET);
 
-       printf("Play [%s] of size [%d] with [%d][%d][%d]\n", file, file_size, frequency, ch, type);
+       printf("Play [%s] of size [%ld] with [%d][%d][%d]\n", file, file_size, frequency, ch, type);
        audio_out_create_new(frequency, ch_table[ch], AUDIO_SAMPLE_TYPE_U8 + type, &output);
 
        audio_out_set_state_changed_cb(output, _audio_out_state_cb, NULL);
        audio_out_prepare(output);
 
        audio_out_get_buffer_size(output, &buffer_size);
-       buf = (char *)malloc(buffer_size);
+       buf = (char *)calloc(buffer_size, sizeof(char));
        if (buf == NULL) {
                printf("malloc failed\n");
                goto EXIT;
@@ -220,20 +220,32 @@ static void _play_file_sample_sync(char *file, int frequency, int ch, int type)
 
        while (file_size > 0) {
                read_bytes = fread(buf, 1, buffer_size, fp);
+
                printf(".");
-               i++;
-               if (i % 10 == 0)
+               if (++i % 10 == 0)
                        printf("|");
                if (i % 100 == 0) {
                        printf("\n");
                        i = 0;
                }
-               audio_out_write(output, buf, read_bytes);
-               file_size = file_size - read_bytes;
+
+               if (read_bytes != buffer_size) {
+                       if (feof(fp)) {
+                               printf("\n EOS! this is a last buffer! \n");
+                       } else if (ferror(fp)) {
+                               printf("\n Error!\n");
+                               break;
+                       }
+               }
+
+               audio_out_write(output, buf, (unsigned int)read_bytes);
+
+               file_size -= (long)read_bytes;
                usleep(10000);
        }
 
 EXIT:
+       printf("\n Cleanup now!\n");
        audio_out_unprepare(output);
        audio_out_destroy(output);
 
@@ -242,7 +254,7 @@ EXIT:
        if (fp)
                fclose(fp);
 
-       printf("\nEOS!!!! Play done\n");
+       printf("Play done\n");
 }
 
 static sound_device_h *find_device_by_id(int id)