X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fftdi.c;h=46797d7dfe3952d0e3ca221849e0d4fb0c8dfef9;hp=72b08fd4c95e65c058469136b4bc158dbb7d7db5;hb=6055d952c3efd2e6b12924c5ec42407fff99b453;hpb=f5e97b5e1b62322b45b4ff5f2f2797c5e9188739;ds=sidebyside diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c index 72b08fd4c9..46797d7dfe 100644 --- a/src/jtag/drivers/ftdi.c +++ b/src/jtag/drivers/ftdi.c @@ -389,6 +389,18 @@ static int ftdi_execute_scan(struct jtag_command *cmd) DEBUG_JTAG_IO("%s type:%d", cmd->cmd.scan->ir_scan ? "IRSCAN" : "DRSCAN", jtag_scan_type(cmd->cmd.scan)); + /* Make sure there are no trailing fields with num_bits == 0, or the logic below will fail. */ + while (cmd->cmd.scan->num_fields > 0 + && cmd->cmd.scan->fields[cmd->cmd.scan->num_fields - 1].num_bits == 0) { + cmd->cmd.scan->num_fields--; + LOG_DEBUG("discarding trailing empty field"); + } + + if (cmd->cmd.scan->num_fields == 0) { + LOG_DEBUG("empty scan, doing nothing"); + return retval; + } + if (cmd->cmd.scan->ir_scan) { if (tap_get_state() != TAP_IRSHIFT) move_to_state(TAP_IRSHIFT); @@ -413,7 +425,7 @@ static int ftdi_execute_scan(struct jtag_command *cmd) if (i == cmd->cmd.scan->num_fields - 1 && tap_get_state() != tap_get_end_state()) { /* Last field, and we're leaving IRSHIFT/DRSHIFT. Clock last bit during tap - *movement */ + * movement. This last field can't have length zero, it was checked above. */ mpsse_clock_data(mpsse_ctx, field->out_value, 0,