Showing the changes to codec/decoder/core/src/decoder_core.cpp (1 of 3 files). Show all
Unified · Split
| @@ -389,25 +389,25 @@ int32_t ParseDecRefPicMarking (PWelsDecoderContext pCtx, PBitStringAux pBs, PSli · 388 unmodified lines | ||
| 389 | 389 | int32_t iIdx = 0; |
| 390 | 390 | do { |
| 391 | 391 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //memory_management_control_operation |
| 392 | − const int32_t kiMmco = uiCode; | |
| 392 | + const uint32_t kuiMmco = uiCode; | |
| 393 | 393 | |
| 394 | − kpRefMarking->sMmcoRef[iIdx].uiMmcoType = kiMmco; | |
| 395 | − if (kiMmco == MMCO_END) | |
| 394 | + kpRefMarking->sMmcoRef[iIdx].uiMmcoType = kuiMmco; | |
| 395 | + if (kuiMmco == MMCO_END) | |
| 396 | 396 | break; |
| 397 | 397 | |
| 398 | − if (kiMmco == MMCO_SHORT2UNUSED || kiMmco == MMCO_SHORT2LONG) { | |
| 398 | + if (kuiMmco == MMCO_SHORT2UNUSED || kuiMmco == MMCO_SHORT2LONG) { | |
| 399 | 399 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //difference_of_pic_nums_minus1 |
| 400 | 400 | kpRefMarking->sMmcoRef[iIdx].iDiffOfPicNum = 1 + uiCode; |
| 401 | 401 | kpRefMarking->sMmcoRef[iIdx].iShortFrameNum = (pSh->iFrameNum - kpRefMarking->sMmcoRef[iIdx].iDiffOfPicNum) & (( |
| 402 | 402 | 1 << pSps->uiLog2MaxFrameNum) - 1); |
| 403 | − } else if (kiMmco == MMCO_LONG2UNUSED) { | |
| 403 | + } else if (kuiMmco == MMCO_LONG2UNUSED) { | |
| 404 | 404 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //long_term_pic_num |
| 405 | 405 | kpRefMarking->sMmcoRef[iIdx].uiLongTermPicNum = uiCode; |
| 406 | 406 | } |
| 407 | − if (kiMmco == MMCO_SHORT2LONG || kiMmco == MMCO_LONG) { | |
| 407 | + if (kuiMmco == MMCO_SHORT2LONG || kuiMmco == MMCO_LONG) { | |
| 408 | 408 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //long_term_frame_idx |
| 409 | 409 | kpRefMarking->sMmcoRef[iIdx].iLongTermFrameIdx = uiCode; |
| 410 | − } else if (kiMmco == MMCO_SET_MAX_LONG) { | |
| 410 | + } else if (kuiMmco == MMCO_SET_MAX_LONG) { | |
| 411 | 411 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //max_long_term_frame_idx_plus1 |
| 412 | 412 | kpRefMarking->sMmcoRef[iIdx].iMaxLongTermFrameIdx = -1 + uiCode; |
| 413 | 413 | } |
| @@ -690,6 +690,8 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 276 unmodified lines | ||
| 690 | 690 | |
| 691 | 691 | // first_mb_in_slice |
| 692 | 692 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //first_mb_in_slice |
| 693 | + WELS_CHECK_SE_UPPER_ERROR (uiCode, 36863u, "first_mb_in_slice", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | |
| 694 | + ERR_INFO_INVALID_FIRST_MB_IN_SLICE)); | |
| 693 | 695 | pSliceHead->iFirstMbInSlice = uiCode; |
| 694 | 696 | |
| 695 | 697 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //slice_type |
| @@ -721,13 +723,10 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 25 unmodified lines | ||
| 721 | 723 | pSliceHead->eSliceType = static_cast <EWelsSliceType> (uiSliceType); |
| 722 | 724 | |
| 723 | 725 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //pic_parameter_set_id |
| 726 | + WELS_CHECK_SE_UPPER_ERROR (uiCode, MAX_PPS_COUNT, "iPpsId out of range", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | |
| 727 | + ERR_INFO_PPS_ID_OVERFLOW)); | |
| 724 | 728 | iPpsId = uiCode; |
| 725 | 729 | |
| 726 | − if (iPpsId >= MAX_PPS_COUNT) { | |
| 727 | − WelsLog (pLogCtx, WELS_LOG_WARNING, "iPpsId out of range"); | |
| 728 | − return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_PPS_ID_OVERFLOW); | |
| 729 | − } | |
| 730 | − | |
| 731 | 730 | //add check PPS available here |
| 732 | 731 | if (pCtx->bPpsAvailFlags[iPpsId] == false) { |
| 733 | 732 | pCtx->sDecoderStatistics.iPpsReportErrorNum++; |
| @@ -939,9 +938,8 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 205 unmodified lines | ||
| 939 | 938 | if (pPps->bEntropyCodingModeFlag) { |
| 940 | 939 | if (pSliceHead->eSliceType != I_SLICE && pSliceHead->eSliceType != SI_SLICE) { |
| 941 | 940 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); |
| 941 | + WELS_CHECK_SE_UPPER_ERROR (uiCode, SLICE_HEADER_CABAC_INIT_IDC_MAX, "cabac_init_idc", ERR_INFO_INVALID_CABAC_INIT_IDC); | |
| 942 | 942 | pSliceHead->iCabacInitIdc = uiCode; |
| 943 | − WELS_CHECK_SE_UPPER_ERROR (pSliceHead->iCabacInitIdc, SLICE_HEADER_CABAC_INIT_IDC_MAX, "cabac_init_idc", | |
| 944 | − ERR_INFO_INVALID_CABAC_INIT_IDC); | |
| 945 | 943 | } else |
| 946 | 944 | pSliceHead->iCabacInitIdc = 0; |
| 947 | 945 | } |