From d1aa0fff8042820894e0efb3988b18d5c2ef3bbe Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周五, 13 11月 2015 06:20:03 +0800 Subject: [PATCH] Resolve #65: Infinite loop with non ASCII character --- libscpi/src/lexer.c | 2 ++ libscpi/test/test_lexer_parser.c | 2 ++ libscpi/test/test_parser.c | 10 +++++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libscpi/src/lexer.c b/libscpi/src/lexer.c index ee4696c..98c6f74 100644 --- a/libscpi/src/lexer.c +++ b/libscpi/src/lexer.c @@ -642,6 +642,8 @@ state->pos--; break; } + } else { + break; } } } diff --git a/libscpi/test/test_lexer_parser.c b/libscpi/test/test_lexer_parser.c index 6110490..fe1c219 100644 --- a/libscpi/test/test_lexer_parser.c +++ b/libscpi/test/test_lexer_parser.c @@ -205,6 +205,8 @@ TEST_TOKEN("'ah\"oj' ", scpiParser_parseProgramData, 0, 7, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); TEST_TOKEN("\"ah\"\"oj\" ", scpiParser_parseProgramData, 0, 8, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); TEST_TOKEN("\"\"", scpiParser_parseProgramData, 0, 2, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); + TEST_TOKEN("'test\r\n' ", scpiParser_parseProgramData, 0, 8, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); + TEST_TOKEN("'\xFA\xF0' ", scpiParser_parseProgramData, 0, 0, SCPI_TOKEN_UNKNOWN); TEST_TOKEN("abc_213as564 , ", scpiLex_CharacterProgramData, 0, 12, SCPI_TOKEN_PROGRAM_MNEMONIC); diff --git a/libscpi/test/test_parser.c b/libscpi/test/test_parser.c index 990ea62..84b27c2 100644 --- a/libscpi/test/test_parser.c +++ b/libscpi/test/test_parser.c @@ -233,6 +233,10 @@ TEST_INPUT("TEST:TREEA?;:TEXT? \"PARAM1\", \"PARAM2\"\r\n", "10;\"PARAM2\"\r\n"); output_buffer_clear(); + /* Test special characters in parameters */ + TEST_INPUT("TEXT? \"\", \"test\r\n\"\r\n", "\"test\r\n\"\r\n"); + output_buffer_clear(); + CU_ASSERT_EQUAL(err_buffer_pos, 0); error_buffer_clear(); } @@ -256,9 +260,9 @@ TEST_ERROR("*IDN? 12\r\n", "MA,IN,0,VER\r\n", FALSE, SCPI_ERROR_PARAMETER_NOT_ALLOWED); TEST_ERROR("TEXT? \"PARAM1\", \"PARAM2\"\r\n", "\"PARAM2\"\r\n", TRUE, 0); TEST_ERROR("ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ" - "ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ" - "ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ", - "", FALSE, SCPI_ERROR_INPUT_BUFFER_OVERRUN); + "ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ" + "ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ", + "", FALSE, SCPI_ERROR_INPUT_BUFFER_OVERRUN); // TODO: SCPI_ERROR_INVALID_SEPARATOR // TODO: SCPI_ERROR_INVALID_SUFFIX -- Gitblit v1.9.1