Skip to content

Commit e2ce65d

Browse files
Avoid potential 0-length access in memcpy (#227)
* Avoid potential 0-length access in memcpy * Update vertex-filter.c
1 parent 96c0132 commit e2ce65d

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

src/vertex-filter.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ static inline void wk_vertex_filter_finalize_details(vertex_filter_t* vertex_fil
8787
if (vertex_filter->coord_id != vertex_filter->details_size) {
8888
for (int i = 0; i < 3; i++) {
8989
SEXP new_item = PROTECT(Rf_allocVector(INTSXP, vertex_filter->coord_id));
90-
memcpy(INTEGER(new_item), INTEGER(VECTOR_ELT(vertex_filter->details, i)),
91-
vertex_filter->coord_id * sizeof(int));
90+
if (vertex_filter->coord_id > 0) {
91+
memcpy(INTEGER(new_item), INTEGER(VECTOR_ELT(vertex_filter->details, i)),
92+
vertex_filter->coord_id * sizeof(int));
93+
}
9294
SET_VECTOR_ELT(vertex_filter->details, i, new_item);
9395
UNPROTECT(1);
9496
}

src/xy-writer.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ static inline SEXP xy_writer_realloc_result(SEXP result, R_xlen_t new_size,
5050
}
5151

5252
for (int i = 0; i < 4; i++) {
53-
if (VECTOR_ELT(result, i) == R_NilValue) {
53+
if (VECTOR_ELT(result, i) == R_NilValue || size_cpy == 0) {
5454
continue;
5555
}
5656

57-
memcpy(REAL(VECTOR_ELT(new_result, i)), REAL(VECTOR_ELT(result, i)),
57+
memcpy(REAL(VECTOR_ELT(new_result, i)), REAL_RO(VECTOR_ELT(result, i)),
5858
sizeof(double) * size_cpy);
5959
}
6060

0 commit comments

Comments
 (0)