示例#1
0
static int
test_roundtrip(void)
{
    static const round_vec test_strs[] = {
        "hi",
        "hi!",
        "hi%21",
        "%",
        "*",
        "\n",
        "h%"
    };
    static const int num = sizeof(test_strs)/sizeof(round_vec);
    int i, ret;
    char *tmp_enc = NULL, *tmp_dec = NULL;
    GError *err = NULL;
    
    ret = TRUE;
    for (i = 0; i < num; i++) {
        tmp_enc = hexencode_string(test_strs[i]);
        tmp_dec = tmp_enc? hexdecode_string(tmp_enc, &err) : NULL;
        if (!tmp_enc || !tmp_dec || strcmp(test_strs[i], tmp_dec) || err) {
            ret = FALSE;
            tu_dbg("roundtrip failure:\n")
            tu_dbg("input:      \"%s\"\n", test_strs[i]);
            tu_dbg("enc output: \"%s\"\n", tmp_enc? tmp_enc : "(null)");
            tu_dbg("dec output: \"%s\"\n", tmp_dec? tmp_dec : "(null)");
            tu_dbg("error msg:  %s\n", err? err->message : "(none)");
        }
        g_clear_error(&err);
        amfree(tmp_enc);
        amfree(tmp_dec);
    }
    return ret;
}
示例#2
0
static int
test_roundtrip_rand(void)
{
    int i, ret;
    simpleprng_state_t state;
    char *in, *tmp_enc = NULL, *tmp_dec = NULL;
    size_t size;
    GError *err = NULL;
    
    simpleprng_seed(&state, 0xface);
    ret = TRUE;
    for (i = 0; i < 100; i++) {
        size = simpleprng_rand_byte(&state);
        in = g_malloc0(size+1);
        simpleprng_fill_buffer(&state, in, size);
        tmp_enc = hexencode_string(in);
        tmp_dec = tmp_enc? hexdecode_string(tmp_enc, &err) : NULL;
        if (!tmp_enc || !tmp_dec || strcmp(in, tmp_dec) || err) {
            ret = FALSE;
            tu_dbg("roundtrip failure:\n")
            tu_dbg("input:      \"%s\"\n", in);
            tu_dbg("enc output: \"%s\"\n", tmp_enc? tmp_enc : "(null)");
            tu_dbg("dec output: \"%s\"\n", tmp_dec? tmp_dec : "(null)");
            tu_dbg("error msg:  %s\n", err? err->message : "(none)");
        }
        g_clear_error(&err);
        amfree(tmp_enc);
        amfree(tmp_dec);
        g_free(in);
    }
    return ret;
}
示例#3
0
static gboolean
test_decode(void)
{
    static const dec_vec test_strs[] = {
        {"hi", "hi", FALSE},
        {"hi%21", "hi!", FALSE},
        {"%25", "%", FALSE},
        {"%2a", "*", FALSE},
        {"%2A", "*", FALSE},
        {"%0a", "\n", FALSE},
        {"%0A", "\n", FALSE},
        {"%0ahi%0a", "\nhi\n", FALSE},
        {"%", "", TRUE},
        {"%2", "", TRUE},
        {"h%", "", TRUE},
        {"%0h", "", TRUE},
        {"%h0", "", TRUE},
        {"%00", "", TRUE}
    };
    static const int num = G_N_ELEMENTS(test_strs);
    int i;
    gboolean ret;
    char *tmp;
    GError *err = NULL;
    
    ret = TRUE;
    for (i = 0; i < num; i++) {
        tmp = hexdecode_string(test_strs[i].in, &err);
        if (!tmp || !g_str_equal(test_strs[i].out, tmp) ||
            (!!err != test_strs[i].expect_err)) {
            ret = FALSE;
            tu_dbg("decode failure:\n")
            tu_dbg("input:     \"%s\"\n", test_strs[i].in);
            tu_dbg("output:    \"%s\"\n", tmp? tmp : "(null)");
            tu_dbg("expected:  \"%s\"\n", test_strs[i].out);
            tu_dbg("error msg: %s\n", err? err->message : "(none)");
        }
        g_clear_error(&err);
        g_free(tmp);
            
    }
    return ret;
}