iceignatius / bertlv

BER-TLV parser and encoder.
Other
3 stars 2 forks source link

发现两个 Bug #2

Open Ming-Y-ANG opened 4 weeks ago

Ming-Y-ANG commented 4 weeks ago
  1. bertlv_tag_make 函数中第一个判断 num < 0x7f 是不是应该是 num < 0x1f 才对?,低标签编码的 num 范围应该是 0-30?
  2. 在 1 的基础上我修改为 num < 0x1f, 执行下面的测试程序,发现像 256, 512 这种数 bertlv_tag_get_number 有问题?

    int main(int argc, char **argv)
    { 
        int num, tag;
    
        num = 30;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 31;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 32;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 64;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 128;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 255;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 256;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 257;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
        num = 512;
        tag = bertlv_tag_make(BERTLV_CLASS_APPLICATION, BERTLV_TYPE_PRIMITIVE, num);
        printf("num: %d, tag: %x, num: %ld\n", num, tag, bertlv_tag_get_number(tag));
    
        return 0;
    }
    num: 30, tag: 5e, num: 30
    num: 31, tag: 5f1f, num: 31
    num: 32, tag: 5f20, num: 32
    num: 64, tag: 5f40, num: 64
    num: 128, tag: 5f8180, num: 128
    num: 255, tag: 5f81ff, num: 255
    num: 256, tag: 5f8200, num: 0
    num: 257, tag: 5f8201, num: 257
    num: 512, tag: 5f8400, num: 0
iceignatius commented 3 weeks ago

感謝您的回報,現已修正這個問題。