fix[h264d]: Fix segment fault problem

Field buffer may be reset when encountering error at parsing.

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x50
Cause: null pointer dereference
    r0  00000001  r1  00000000  r2  aefe63a7  r3  00000003
    r4  00000001  r5  00000001  r6  00000000  r7  0000001c
    r8  0000000f  r9  00000000  r10 0000001a  r11 ee1b2650
    ip  ee1b1fb8  sp  ee1b2648  lr  f5db5c5b  pc  f0547bfc

backtrace:
     #00 pc 000c5bfc  /vendor/lib/libmpp.so (mpp_frame_set_errinfo+44)
     #01 pc 0010aa54  /vendor/lib/libmpp.so (get_field_dpb_combine_flag+796)
     #02 pc 00113990  /vendor/lib/libmpp.so (alloc_decpic+1456)
     #03 pc 00112da8  /vendor/lib/libmpp.so (init_picture+340)
     #04 pc 000fc128  /vendor/lib/libmpp.so (parse_loop+1092)
     #05 pc 000f7d10  /vendor/lib/libmpp.so (h264d_parse+212)
     #06 pc 0009b7f8  /vendor/lib/libmpp.so (mpp_parser_parse+164)

Change-Id: Iff4b628b7f807d6da448ea8553c5af613e63d328
Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
This commit is contained in:
Johnson Ding 2025-01-14 11:06:54 +08:00
parent f0ff240b87
commit 0b1c78701f

View file

@ -1855,7 +1855,7 @@ RK_U32 get_field_dpb_combine_flag(H264_FrameStore_t *p_last, H264_StorePic_t *p)
struct h264_store_pic_t *pic = NULL;
pic = p_last->structure == TOP_FIELD ? p_last->top_field : p_last->bottom_field;
if (pic && !pic->combine_flag)
if (pic && pic->mem_mark->mframe && !pic->combine_flag)
mpp_frame_set_errinfo(pic->mem_mark->mframe, 1);
}
}