From ea95cdb8e2012b21cd3a12f7062e851178c7f455 Mon Sep 17 00:00:00 2001 From: zwelch Date: Fri, 12 Jun 2009 01:40:48 +0000 Subject: [PATCH 1/1] Improve VID/PID command argument handling in FTDI driver: - Bug fix: Return a syntax error when less than two arguments are given. - Bug fix: Use parse_u16 helper to ensure vales are parsed properly. - Simplify loop termination logic by ensuring argc is always even. - Move loop induction variable declaration to where it is used. git-svn-id: svn://svn.berlios.de/openocd/trunk@2215 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/ft2232.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/jtag/ft2232.c b/src/jtag/ft2232.c index 4bc2f3fe43..a458315ba7 100644 --- a/src/jtag/ft2232.c +++ b/src/jtag/ft2232.c @@ -2827,8 +2827,6 @@ static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char* static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc) { - int i; - if (argc > MAX_USB_IDS * 2) { LOG_WARNING("ignoring extra IDs in ft2232_vid_pid " @@ -2839,13 +2837,21 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char { LOG_WARNING("incomplete ft2232_vid_pid configuration directive"); if (argc < 2) - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; + // remove the incomplete trailing id + argc -= 1; } - for (i = 0; i + 1 < argc; i += 2) + int i; + int retval = ERROR_OK; + for (i = 0; i < argc; i += 2) { - ft2232_vid[i >> 1] = strtol(args[i], NULL, 0); - ft2232_pid[i >> 1] = strtol(args[i + 1], NULL, 0); + retval = parse_u16(args[i], &ft2232_vid[i >> 1]); + if (ERROR_OK != retval) + break; + retval = parse_u16(args[i + 1], &ft2232_pid[i >> 1]); + if (ERROR_OK != retval) + break; } /* @@ -2854,7 +2860,7 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char */ ft2232_vid[i >> 1] = ft2232_pid[i >> 1] = 0; - return ERROR_OK; + return retval; } -- 2.30.2