From ea3f3f7c00fc0d2a938b63985bd172a027d26cf1 Mon Sep 17 00:00:00 2001 From: mxms Date: Mon, 27 Oct 2025 23:19:33 +0000 Subject: [PATCH] Convert additional memcpy/memsets to unsafe variants Bug: 432511225 Change-Id: I5ea1fcc2e4884985bec0b3a7618dd75dbd6c21f8 --- src/dec/buffer_dec.c | 2 +- src/dec/frame_dec.c | 12 ++++++------ src/dec/io_dec.c | 2 +- src/dec/tree_dec.c | 6 +++--- src/dec/vp8_dec.c | 12 ++++++------ src/dec/vp8l_dec.c | 7 ++++--- src/dec/webp_dec.c | 8 ++++---- src/webp/mux_types.h | 4 ++-- 8 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/dec/buffer_dec.c b/src/dec/buffer_dec.c index 787e6406..86feb672 100644 --- a/src/dec/buffer_dec.c +++ b/src/dec/buffer_dec.c @@ -236,7 +236,7 @@ int WebPInitDecBufferInternal(WebPDecBuffer* buffer, int version) { return 0; // version mismatch } if (buffer == NULL) return 0; - memset(buffer, 0, sizeof(*buffer)); + WEBP_UNSAFE_MEMSET(buffer, 0, sizeof(*buffer)); return 1; } diff --git a/src/dec/frame_dec.c b/src/dec/frame_dec.c index 806e294d..136ba5a3 100644 --- a/src/dec/frame_dec.c +++ b/src/dec/frame_dec.c @@ -105,9 +105,9 @@ static void ReconstructRow(const VP8Decoder* const dec, } else { // we only need to do this init once at block (0,0). // Afterward, it remains valid for the whole topmost row. - memset(y_dst - BPS - 1, 127, 16 + 4 + 1); - memset(u_dst - BPS - 1, 127, 8 + 1); - memset(v_dst - BPS - 1, 127, 8 + 1); + WEBP_UNSAFE_MEMSET(y_dst - BPS - 1, 127, 16 + 4 + 1); + WEBP_UNSAFE_MEMSET(u_dst - BPS - 1, 127, 8 + 1); + WEBP_UNSAFE_MEMSET(v_dst - BPS - 1, 127, 8 + 1); } // Reconstruct one row. @@ -144,7 +144,7 @@ static void ReconstructRow(const VP8Decoder* const dec, if (mb_y > 0) { if (mb_x >= dec->mb_w - 1) { // on rightmost border - memset(top_right, top_yuv[0].y[15], sizeof(*top_right)); + WEBP_UNSAFE_MEMSET(top_right, top_yuv[0].y[15], sizeof(*top_right)); } else { WEBP_UNSAFE_MEMCPY(top_right, top_yuv[1].y, sizeof(*top_right)); } @@ -790,11 +790,11 @@ static int AllocateMemory(VP8Decoder* const dec) { assert(mem <= (uint8_t*)dec->mem + dec->mem_size); // note: left/top-info is initialized once for all. - memset(dec->mb_info - 1, 0, mb_info_size); + WEBP_UNSAFE_MEMSET(dec->mb_info - 1, 0, mb_info_size); VP8InitScanline(dec); // initialize left too. // initialize top - memset(dec->intra_t, B_DC_PRED, intra_pred_mode_size); + WEBP_UNSAFE_MEMSET(dec->intra_t, B_DC_PRED, intra_pred_mode_size); return 1; } diff --git a/src/dec/io_dec.c b/src/dec/io_dec.c index cea04225..10ead29a 100644 --- a/src/dec/io_dec.c +++ b/src/dec/io_dec.c @@ -125,7 +125,7 @@ static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) { static void FillAlphaPlane(uint8_t* dst, int w, int h, int stride) { int j; for (j = 0; j < h; ++j) { - memset(dst, 0xff, w * sizeof(*dst)); + WEBP_UNSAFE_MEMSET(dst, 0xff, w * sizeof(*dst)); dst += stride; } } diff --git a/src/dec/tree_dec.c b/src/dec/tree_dec.c index bd93d53b..6b1bb1e6 100644 --- a/src/dec/tree_dec.c +++ b/src/dec/tree_dec.c @@ -249,7 +249,7 @@ static const uint8_t kBModesProba[NUM_BMODES][NUM_BMODES][NUM_BMODES - 1] = { {112, 19, 12, 61, 195, 128, 48, 4, 24}}}; void VP8ResetProba(VP8Proba* const proba) { - memset(proba->segments, 255u, sizeof(proba->segments)); + WEBP_UNSAFE_MEMSET(proba->segments, 255u, sizeof(proba->segments)); // proba->bands[][] is initialized later } @@ -280,8 +280,8 @@ static void ParseIntraMode(VP8BitReader* const br, VP8Decoder* const dec, ? (VP8GetBit(br, 128, "pred-modes") ? TM_PRED : H_PRED) : (VP8GetBit(br, 163, "pred-modes") ? V_PRED : DC_PRED); block->imodes[0] = ymode; - memset(top, ymode, 4 * sizeof(*top)); - memset(left, ymode, 4 * sizeof(*left)); + WEBP_UNSAFE_MEMSET(top, ymode, 4 * sizeof(*top)); + WEBP_UNSAFE_MEMSET(left, ymode, 4 * sizeof(*left)); } else { uint8_t* modes = block->imodes; int y; diff --git a/src/dec/vp8_dec.c b/src/dec/vp8_dec.c index b43fb556..2f675fad 100644 --- a/src/dec/vp8_dec.c +++ b/src/dec/vp8_dec.c @@ -63,7 +63,7 @@ int VP8InitIoInternal(VP8Io* const io, int version) { return 0; // mismatch error } if (io != NULL) { - memset(io, 0, sizeof(*io)); + WEBP_UNSAFE_MEMSET(io, 0, sizeof(*io)); } return 1; } @@ -168,8 +168,8 @@ static void ResetSegmentHeader(VP8SegmentHeader* const hdr) { hdr->use_segment = 0; hdr->update_map = 0; hdr->absolute_delta = 1; - memset(hdr->quantizer, 0, sizeof(hdr->quantizer)); - memset(hdr->filter_strength, 0, sizeof(hdr->filter_strength)); + WEBP_UNSAFE_MEMSET(hdr->quantizer, 0, sizeof(hdr->quantizer)); + WEBP_UNSAFE_MEMSET(hdr->filter_strength, 0, sizeof(hdr->filter_strength)); } // Paragraph 9.3 @@ -542,7 +542,7 @@ static int ParseResiduals(VP8Decoder* const dec, VP8MB* const mb, uint32_t out_t_nz, out_l_nz; int first; - memset(dst, 0, 384 * sizeof(*dst)); + WEBP_UNSAFE_MEMSET(dst, 0, 384 * sizeof(*dst)); if (!block->is_i4x4) { // parse DC int16_t dc[16] = {0}; const int ctx = mb->nz_dc + left_mb->nz_dc; @@ -652,7 +652,7 @@ void VP8InitScanline(VP8Decoder* const dec) { VP8MB* const left = dec->mb_info - 1; left->nz = 0; left->nz_dc = 0; - memset(dec->intra_l, B_DC_PRED, sizeof(dec->intra_l)); + WEBP_UNSAFE_MEMSET(dec->intra_l, B_DC_PRED, sizeof(dec->intra_l)); dec->mb_x = 0; } @@ -734,7 +734,7 @@ void VP8Clear(VP8Decoder* const dec) { WebPSafeFree(dec->mem); dec->mem = NULL; dec->mem_size = 0; - memset(&dec->br, 0, sizeof(dec->br)); + WEBP_UNSAFE_MEMSET(&dec->br, 0, sizeof(dec->br)); dec->ready = 0; } diff --git a/src/dec/vp8l_dec.c b/src/dec/vp8l_dec.c index d25b3dab..e46859da 100644 --- a/src/dec/vp8l_dec.c +++ b/src/dec/vp8l_dec.c @@ -309,7 +309,7 @@ static int ReadHuffmanCode(int alphabet_size, VP8LDecoder* const dec, VP8LBitReader* const br = &dec->br; const int simple_code = VP8LReadBits(br, 1); - memset(code_lengths, 0, alphabet_size * sizeof(*code_lengths)); + WEBP_UNSAFE_MEMSET(code_lengths, 0, alphabet_size * sizeof(*code_lengths)); if (simple_code) { // Read symbols, codes & code lengths directly. const int num_symbols = VP8LReadBits(br, 1) + 1; @@ -400,7 +400,8 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, } // -1 means a value is unmapped, and therefore unused in the Huffman // image. - memset(mapping, 0xff, num_htree_groups_max * sizeof(*mapping)); + WEBP_UNSAFE_MEMSET(mapping, 0xff, + num_htree_groups_max * sizeof(*mapping)); for (num_htree_groups = 0, i = 0; i < huffman_pixs; ++i) { // Get the current mapping for the group and remap the Huffman image. int* const mapped_group = &mapping[huffman_image[i]]; @@ -1450,7 +1451,7 @@ static int ReadTransform(int* const xsize, int const* ysize, static void InitMetadata(VP8LMetadata* const hdr) { assert(hdr != NULL); - memset(hdr, 0, sizeof(*hdr)); + WEBP_UNSAFE_MEMSET(hdr, 0, sizeof(*hdr)); } static void ClearMetadata(VP8LMetadata* const hdr) { diff --git a/src/dec/webp_dec.c b/src/dec/webp_dec.c index 9377d2b9..d1ef1943 100644 --- a/src/dec/webp_dec.c +++ b/src/dec/webp_dec.c @@ -303,7 +303,7 @@ static VP8StatusCode ParseHeadersInternal(const uint8_t* data, size_t data_size, if (data == NULL || data_size < RIFF_HEADER_SIZE) { return VP8_STATUS_NOT_ENOUGH_DATA; } - memset(&hdrs, 0, sizeof(hdrs)); + WEBP_UNSAFE_MEMSET(&hdrs, 0, sizeof(hdrs)); hdrs.data = data; hdrs.data_size = data_size; @@ -441,7 +441,7 @@ VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers) { void WebPResetDecParams(WebPDecParams* const params) { if (params != NULL) { - memset(params, 0, sizeof(*params)); + WEBP_UNSAFE_MEMSET(params, 0, sizeof(*params)); } } @@ -692,7 +692,7 @@ uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size, int* width, static void DefaultFeatures(WebPBitstreamFeatures* const features) { assert(features != NULL); - memset(features, 0, sizeof(*features)); + WEBP_UNSAFE_MEMSET(features, 0, sizeof(*features)); } static VP8StatusCode GetFeatures(const uint8_t* const data, size_t data_size, @@ -739,7 +739,7 @@ int WebPInitDecoderConfigInternal(WebPDecoderConfig* config, int version) { if (config == NULL) { return 0; } - memset(config, 0, sizeof(*config)); + WEBP_UNSAFE_MEMSET(config, 0, sizeof(*config)); DefaultFeatures(&config->input); if (!WebPInitDecBuffer(&config->output)) { return 0; diff --git a/src/webp/mux_types.h b/src/webp/mux_types.h index 4f8df6dc..c11f89e9 100644 --- a/src/webp/mux_types.h +++ b/src/webp/mux_types.h @@ -65,7 +65,7 @@ struct WebPData { // Initializes the contents of the 'webp_data' object with default values. static WEBP_INLINE void WebPDataInit(WebPData* webp_data) { if (webp_data != NULL) { - memset(webp_data, 0, sizeof(*webp_data)); + WEBP_UNSAFE_MEMSET(webp_data, 0, sizeof(*webp_data)); } } @@ -87,7 +87,7 @@ WEBP_NODISCARD static WEBP_INLINE int WebPDataCopy(const WebPData* src, if (src->bytes != NULL && src->size != 0) { dst->bytes = (uint8_t*)WebPMalloc(src->size); if (dst->bytes == NULL) return 0; - memcpy((void*)dst->bytes, src->bytes, src->size); + WEBP_UNSAFE_MEMCPY((void*)dst->bytes, src->bytes, src->size); dst->size = src->size; } return 1;