From c7fbb5d4cdea49c5157a43c12faf52d40fb5e268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BB=97=20Minh=20Tu=E1=BA=A5n?= Date: Thu, 14 Feb 2019 23:12:18 +0700 Subject: [PATCH] Another way to solve when compare with issue (#1379) * cstest: partial details are supported in issues.cs --- suite/cstest/src/capstone_test.c | 37 +++++++++++++++----------------- suite/cstest/src/x86_detail.c | 4 +++- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/suite/cstest/src/capstone_test.c b/suite/cstest/src/capstone_test.c index 26cb7440..d966a12a 100644 --- a/suite/cstest/src/capstone_test.c +++ b/suite/cstest/src/capstone_test.c @@ -275,6 +275,7 @@ void test_single_issue(csh *handle, cs_mode mode, char *line, int detail) { char **list_part, **list_byte, **list_part_cs_result, **list_part_issue_result; int size_part, size_byte, size_part_cs_result, size_part_issue_result; + char *tmptmp; int i, count, j; unsigned char *code; cs_insn *insn; @@ -326,34 +327,30 @@ void test_single_issue(csh *handle, cs_mode mode, char *line, int detail) } } } - - list_part_cs_result = split(cs_result, " ; ", &size_part_cs_result); + + trim_str(cs_result); + add_str(&cs_result, " ;"); + // list_part_cs_result = split(cs_result, " ; ", &size_part_cs_result); list_part_issue_result = split(list_part[1], " ; ", &size_part_issue_result); - if (size_part_cs_result != size_part_issue_result) { - fprintf(stderr, "[ ERROR ] --- %s --- Number of details( Capstone: %d --- Issue: %d ) doesn't match\n", list_part[0], size_part_cs_result, size_part_issue_result); - cs_free(insn, count); - free_strs(list_part, size_part); - free_strs(list_byte, size_byte); - free(cs_result); - free_strs(list_part_cs_result, size_part_cs_result); - free_strs(list_part_issue_result, size_part_issue_result); - _fail(__FILE__, __LINE__); - } - - for (i = 0; i < size_part_cs_result; ++i) { - trim_str(list_part_cs_result[i]); + for (i = 0; i < size_part_issue_result; ++i) { trim_str(list_part_issue_result[i]); + memset(tmptmp, MAXMEM, 0); + + tmptmp = (char *)malloc(sizeof(char)); + tmptmp[0] = '\0'; + add_str(&tmptmp, "%s", list_part_issue_result[i]); + add_str(&tmptmp, " ;"); - if (strcmp(list_part_cs_result[i], list_part_issue_result[i])) { - fprintf(stderr, "[ ERROR ] --- %s --- \"%s\" != \"%s\"\n", list_part[0], list_part_cs_result[i], list_part_issue_result[i]); + if ((strstr(cs_result, tmptmp)) == NULL) { + fprintf(stderr, "[ ERROR ] --- %s --- \"%s\" not in \"%s\"\n", list_part[0], list_part_issue_result[i], cs_result); cs_free(insn, count); free_strs(list_part, size_part); free_strs(list_byte, size_byte); free(cs_result); - free_strs(list_part_cs_result, size_part_cs_result); + // free_strs(list_part_cs_result, size_part_cs_result); free_strs(list_part_issue_result, size_part_issue_result); - + free(tmptmp); _fail(__FILE__, __LINE__); } } @@ -362,6 +359,6 @@ void test_single_issue(csh *handle, cs_mode mode, char *line, int detail) free_strs(list_part, size_part); free_strs(list_byte, size_byte); free(cs_result); - free_strs(list_part_cs_result, size_part_cs_result); + // free_strs(list_part_cs_result, size_part_cs_result); free_strs(list_part_issue_result, size_part_issue_result); } diff --git a/suite/cstest/src/x86_detail.c b/suite/cstest/src/x86_detail.c index 66870af7..f5456877 100644 --- a/suite/cstest/src/x86_detail.c +++ b/suite/cstest/src/x86_detail.c @@ -10,7 +10,9 @@ static void print_string_hex(char **result, const char *comment, unsigned char * add_str(result, "%s", comment); for (c = str; c < str + len; c++) { - add_str(result, "0x%02x ", *c & 0xff); + add_str(result, "0x%02x", *c & 0xff); + if (c < str + len - 1) + add_str(result, " "); } }