Convert additional memcpy/memsets to unsafe variants

Bug: 432511225
Change-Id: I5ea1fcc2e4884985bec0b3a7618dd75dbd6c21f8
This commit is contained in:
mxms
2025-10-27 23:19:33 +00:00
parent ed05414168
commit ea3f3f7c00
8 changed files with 27 additions and 26 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;