]> git.gag.com Git - fw/stlink/blobdiff - src/stlink-usb.c
Assert size only if Q_BUF_LEN is smaller UINT16_MAX
[fw/stlink] / src / stlink-usb.c
index 79709ac0b2f8ec6d4444425eb50a98442fce4e23..b417d41aa1ea7269a92d94b2dc20e74ab1e465e0 100644 (file)
@@ -155,7 +155,7 @@ void _stlink_usb_version(stlink_t *sl) {
     buf[0] = STLINK_GET_VERSION;
     buf[1] = 0x80;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 6);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -163,7 +163,7 @@ void _stlink_usb_version(stlink_t *sl) {
 
 #if 1 /* DEBUG */
     {
-        unsigned int i;
+        ssize_t i;
         for (i = 0; i < size; ++i) printf("%02x", buf[i]);
         printf("\n");
     }
@@ -182,6 +182,9 @@ void _stlink_usb_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
     write_uint16(cmd_buf + 6, len);
     send_only(slu, cmd_buf, STLINK_CMD_SIZE);
 
+#if Q_BUF_LEN < UINT16_MAX
+    assert(len < sizeof(sl->q_buf));  // makes a compiler warning? always true?
+#endif
     assert((len & 3) == 0); 
     stlink_print_data(sl);
     send_only(slu, buf, len);
@@ -200,6 +203,9 @@ void _stlink_usb_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len) {
     write_uint16(cmd_buf + 6, len);
     send_only(slu, cmd_buf, STLINK_CMD_SIZE);
 
+#if Q_BUF_LEN < UINT16_MAX
+    assert(len < sizeof(sl->q_buf));  // makes a compiler warning? always true?
+#endif
     stlink_print_data(sl);
     send_only(slu, buf, len);
 }
@@ -211,7 +217,7 @@ int _stlink_usb_current_mode(stlink_t * sl) {
     ssize_t size;
     memset(buf, 0, sizeof (sl->q_buf));
     buf[0] = STLINK_GET_CURRENT_MODE;
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 2);
     if (size == -1) {
         printf("[!] send_recv\n");
         return -1;
@@ -228,7 +234,7 @@ void _stlink_usb_core_id(stlink_t * sl) {
     buf[0] = STLINK_DEBUG_COMMAND;
     buf[1] = STLINK_DEBUG_READCOREID;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 4);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -247,7 +253,7 @@ void _stlink_usb_status(stlink_t * sl) {
     buf[0] = STLINK_DEBUG_COMMAND;
     buf[1] = STLINK_DEBUG_GETSTATUS;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 2);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -271,7 +277,7 @@ void _stlink_usb_force_debug(stlink_t *sl) {
 
     buf[0] = STLINK_DEBUG_COMMAND;
     buf[1] = STLINK_DEBUG_FORCEDEBUG;
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 2);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -290,7 +296,7 @@ void _stlink_usb_enter_swd_mode(stlink_t * sl) {
     buf[1] = STLINK_SWD_ENTER;
     buf[2] = STLINK_DEBUG_ENTER_SWD;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 2);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -343,7 +349,7 @@ void _stlink_usb_step(stlink_t* sl) {
     buf[0] = STLINK_DEBUG_COMMAND;
     buf[1] = STLINK_DEBUG_STEPCORE;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 2);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -363,7 +369,7 @@ void _stlink_usb_run(stlink_t* sl) {
     buf[0] = STLINK_DEBUG_COMMAND;
     buf[1] = STLINK_DEBUG_RUNCORE;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, 2);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;
@@ -392,8 +398,9 @@ void _stlink_usb_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
     unsigned char* const buf = sl->q_buf;
     ssize_t size;
 
-    /* assume len < sizeof(sl->q_buf) */
-    assert(len < sizeof(sl->q_buf));  // makes a compiler warning? always true?
+#if Q_BUF_LEN < UINT16_MAX
+    assert(len < sizeof(sl->q_buf));
+#endif
 
     memset(buf, 0, sizeof (sl->q_buf));
     buf[0] = STLINK_DEBUG_COMMAND;
@@ -404,7 +411,7 @@ void _stlink_usb_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
     assert (len < 256);
     buf[6] = (uint8_t) len;
 
-    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, sizeof (sl->q_buf));
+    size = send_recv(slu, buf, STLINK_CMD_SIZE, buf, len);
     if (size == -1) {
         printf("[!] send_recv\n");
         return;