summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHiFiPhile <[email protected]>2025-10-11 16:09:33 +0200
committerHiFiPhile <[email protected]>2025-10-11 16:09:33 +0200
commit785454a3977d9118bf8d86e54a564689b5065f9b (patch)
tree58ee9380da6d625aa065c9473cd5bbbe18d03d9d /src
parentc566db87b32a412f2a2739c4706446e132c26369 (diff)
parent2e29d1c60d119b2aa71e36d0c1ac2a383e333076 (diff)
Merge branch 'master' into dwc2_ep0
Signed-off-by: HiFiPhile <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/common/tusb_common.h23
-rw-r--r--src/portable/synopsys/dwc2/dcd_dwc2.c14
2 files changed, 26 insertions, 11 deletions
diff --git a/src/common/tusb_common.h b/src/common/tusb_common.h
index 2b095e238..6393652a3 100644
--- a/src/common/tusb_common.h
+++ b/src/common/tusb_common.h
@@ -109,20 +109,35 @@ extern void* tusb_app_phys_to_virt(void *phys_addr);
// This is a backport of memset_s from c11
TU_ATTR_ALWAYS_INLINE static inline int tu_memset_s(void *dest, size_t destsz, int ch, size_t count) {
- // TODO may check if desst and src is not NULL
- if ( count > destsz ) {
+ // Validate parameters
+ if (dest == NULL) {
return -1;
}
+
+ if (count > destsz) {
+ return -1;
+ }
+
memset(dest, ch, count);
return 0;
}
// This is a backport of memcpy_s from c11
TU_ATTR_ALWAYS_INLINE static inline int tu_memcpy_s(void *dest, size_t destsz, const void *src, size_t count) {
- // TODO may check if desst and src is not NULL
- if ( count > destsz ) {
+ // Validate parameters
+ if (dest == NULL) {
return -1;
}
+
+ // For memcpy, src may be NULL only if count == 0. Reject otherwise.
+ if (src == NULL && count != 0) {
+ return -1;
+ }
+
+ if (count > destsz) {
+ return -1;
+ }
+
memcpy(dest, src, count);
return 0;
}
diff --git a/src/portable/synopsys/dwc2/dcd_dwc2.c b/src/portable/synopsys/dwc2/dcd_dwc2.c
index 12290b6a4..638c3e3ab 100644
--- a/src/portable/synopsys/dwc2/dcd_dwc2.c
+++ b/src/portable/synopsys/dwc2/dcd_dwc2.c
@@ -831,14 +831,14 @@ static void handle_rxflvl_irq(uint8_t rhport) {
dfifo_read_packet(dwc2, xfer->buffer, byte_count);
xfer->buffer += byte_count;
}
+ }
- // short packet, minus remaining bytes (xfer_size)
- if (byte_count < xfer->max_size) {
- const dwc2_ep_tsize_t tsiz = {.value = epout->tsiz};
- xfer->total_len -= tsiz.xfer_size;
- if (epnum == 0) {
- _dcd_data.ep0_pending[TUSB_DIR_OUT] = 0;
- }
+ // short packet (including ZLP when byte_count == 0), minus remaining bytes (xfer_size)
+ if (byte_count < xfer->max_size) {
+ const dwc2_ep_tsize_t tsiz = {.value = epout->tsiz};
+ xfer->total_len -= tsiz.xfer_size;
+ if (epnum == 0) {
+ _dcd_data.ep0_pending[TUSB_DIR_OUT] = 0;
}
}
break;