appunite / AndroidFFmpeg

[DEPRECATED] FFmpeg build for android random architectures with example jni
Apache License 2.0
1.07k stars 470 forks source link

Bad malloc in player_start_decoding_threads #146

Open martri opened 8 years ago

martri commented 8 years ago

Hello,

The malloc for DecoderData at `player_start_decoding_threads' is being passed size-of-pointer and not size-of-struct.

I was getting random SIGSEGVs due to DecoderData being corrupt (I build with ndk r10e and run on Android 5.1); once applying the fix it seems to work fine.

Thank you and kind regards, Marco.

diff --git a/library-jni/jni/player.c b/library-jni/jni/player.c
index 7ffdd33..44657b3 100644
--- a/library-jni/jni/player.c
+++ b/library-jni/jni/player.c
@@ -2058,7 +2058,7 @@ int player_start_decoding_threads(struct Player *player) {
        goto end;
    }
    for (i = 0; i < player->caputre_streams_no; ++i) {
-       struct DecoderData * decoder_data = malloc(sizeof(decoder_data));
+       struct DecoderData * decoder_data = malloc(sizeof(*decoder_data));
        *decoder_data = (struct DecoderData) {player: player, stream_no: i};
        ret = pthread_create(&player->decode_threads[i], &attr, player_decode,
                decoder_data);