From: ornse01 Date: Tue, 19 Aug 2014 17:55:43 +0000 (+0000) Subject: add tadsegment structure validation. X-Git-Url: http://git.osdn.net/view?p=bbk%2Fbchanf.git;a=commitdiff_plain;h=bf9fc1ca8c1a6849c3d482b1574ff8f9965ad996 add tadsegment structure validation. git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanf/trunk@625 20a0b8eb-f62a-4a12-8fe1-b598822500fb --- diff --git a/src/tad/tadsegment.c b/src/tad/tadsegment.c index c76ffa5..14086c9 100644 --- a/src/tad/tadsegment.c +++ b/src/tad/tadsegment.c @@ -53,3 +53,31 @@ EXPORT W tadsegment_getvariable(tadsegment *segment, UB *segid, UW *seglen, UB * return 0; } + +EXPORT Bool tadsegment_isvalid(tadsegment *segment) +{ + LTADSEG *seg; + + switch (segment->type) { + case TADSEGMENT_TYPE_VARIABLE: + seg = (LTADSEG*)segment->value.variable.raw; + if (seg->len == 0xffff) { + if (segment->value.variable.rawlen != (seg->llen + 8)) { + return False; + } + } else { + if (segment->value.variable.rawlen != (seg->len + 4)) { + return False; + } + } + return True; + case TADSEGMENT_TYPE_CHARACTOR: + if ((segment->value.ch & 0xFF00) == 0xFE00) { + return False; + } + return True; + case TADSEGMENT_TYPE_LANGCODE: + return True; + } + return False; +} diff --git a/src/tad/tadsegment.h b/src/tad/tadsegment.h index 02bf2d2..0af9b59 100644 --- a/src/tad/tadsegment.h +++ b/src/tad/tadsegment.h @@ -49,5 +49,6 @@ struct tadsegment_ { typedef struct tadsegment_ tadsegment; IMPORT W tadsegment_getvariable(tadsegment *segment, UB *segid, UW *seglen, UB **segdata); +IMPORT Bool tadsegment_isvalid(tadsegment *segment); #endif diff --git a/src/tad/test_tadsegment.c b/src/tad/test_tadsegment.c index a8ef953..58917a6 100644 --- a/src/tad/test_tadsegment.c +++ b/src/tad/test_tadsegment.c @@ -128,10 +128,132 @@ LOCAL UNITTEST_RESULT test_tadsegment_4() return UNITTEST_RESULT_FAIL; } +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_1() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_VARIABLE; + segment.value.variable.raw = (UB*)(TC[]){ 0xFFA2, 0x0006, 0x0300, 0x0101, 0x0101 }; + segment.value.variable.rawlen = 10; + + ok = tadsegment_isvalid(&segment); + if (ok == False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_2() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_VARIABLE; + segment.value.variable.raw = (UB*)(TC[]){ 0xFFE5, 0xFFFF, 0xFF00, 0x0001 }; + segment.value.variable.rawlen = 0x1FF00 + 8; + + ok = tadsegment_isvalid(&segment); + if (ok == False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_3() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_CHARACTOR; + segment.value.ch = 0x2121; + + ok = tadsegment_isvalid(&segment); + if (ok == False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_4() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_LANGCODE; + + ok = tadsegment_isvalid(&segment); + if (ok == False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_5() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_VARIABLE; + segment.value.variable.raw = (UB*)(TC[]){ 0xFFA2, 0x0006, 0x0300, 0x0101, 0x0101 }; + segment.value.variable.rawlen = 12; + + ok = tadsegment_isvalid(&segment); + if (ok != False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_6() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_VARIABLE; + segment.value.variable.raw = (UB*)(TC[]){ 0xFFE5, 0xFFFF, 0xFF00, 0x0001 }; + segment.value.variable.rawlen = 0x1FF00 + 10; + + ok = tadsegment_isvalid(&segment); + if (ok != False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + +LOCAL UNITTEST_RESULT test_tadsegment_isvalid_7() +{ + tadsegment segment; + Bool ok; + + segment.type = TADSEGMENT_TYPE_CHARACTOR; + segment.value.ch = 0xFE21; + + ok = tadsegment_isvalid(&segment); + if (ok != False) { + return UNITTEST_RESULT_FAIL; + } + + return UNITTEST_RESULT_PASS; +} + EXPORT VOID test_tadsegment_main(unittest_driver_t *driver) { UNITTEST_DRIVER_REGIST(driver, test_tadsegment_1); UNITTEST_DRIVER_REGIST(driver, test_tadsegment_2); UNITTEST_DRIVER_REGIST(driver, test_tadsegment_3); UNITTEST_DRIVER_REGIST(driver, test_tadsegment_4); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_1); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_2); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_3); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_4); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_5); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_6); + UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_7); }