Skip to content

Commit 17ae239

Browse files
committed
py: Use memmove instead of memcpy when appropriate.
Found this bug by running unix/ tests with DEBUG=1 enabled when compiling.
1 parent 02d95d7 commit 17ae239

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

py/obj.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,8 +585,8 @@ mp_obj_t mp_seq_extract_slice(uint len, const mp_obj_t *seq, mp_bound_slice_t *i
585585
#define mp_seq_replace_slice_no_grow(dest, dest_len, beg, end, slice, slice_len, item_t) \
586586
/*printf("memcpy(%p, %p, %d)\n", dest + beg, slice, slice_len * sizeof(item_t));*/ \
587587
memcpy(dest + beg, slice, slice_len * sizeof(item_t)); \
588-
/*printf("memcpy(%p, %p, %d)\n", dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));*/ \
589-
memcpy(dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));
588+
/*printf("memmove(%p, %p, %d)\n", dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));*/ \
589+
memmove(dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));
590590

591591
#define mp_seq_replace_slice_grow_inplace(dest, dest_len, beg, end, slice, slice_len, len_adj, item_t) \
592592
/*printf("memmove(%p, %p, %d)\n", dest + beg + len_adj, dest + beg, (dest_len - beg) * sizeof(item_t));*/ \

py/objlist.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ STATIC mp_obj_t list_pop(uint n_args, const mp_obj_t *args) {
274274
uint index = mp_get_index(self->base.type, self->len, n_args == 1 ? MP_OBJ_NEW_SMALL_INT(-1) : args[1], false);
275275
mp_obj_t ret = self->items[index];
276276
self->len -= 1;
277-
memcpy(self->items + index, self->items + index + 1, (self->len - index) * sizeof(mp_obj_t));
277+
memmove(self->items + index, self->items + index + 1, (self->len - index) * sizeof(mp_obj_t));
278278
// Clear stale pointer from slot which just got freed to prevent GC issues
279279
self->items[self->len] = MP_OBJ_NULL;
280280
if (self->alloc > LIST_MIN_ALLOC && self->alloc > 2 * self->len) {

py/objstr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ STATIC mp_obj_t str_rsplit(uint n_args, const mp_obj_t *args) {
567567
if (idx != 0) {
568568
// We split less parts than split limit, now go cleanup surplus
569569
int used = org_splits + 1 - idx;
570-
memcpy(res->items, &res->items[idx], used * sizeof(mp_obj_t));
570+
memmove(res->items, &res->items[idx], used * sizeof(mp_obj_t));
571571
mp_seq_clear(res->items, used, res->alloc, sizeof(*res->items));
572572
res->len = used;
573573
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy