/**
 * Test characters that should be unchanged
 * Mostly a copy from URL encoding
 */
static char* testXmlDecodeUntouched(void)
{
    const char* lower   = "abcdefghijklmnopqrstuvwxyz";
    const char* upper   = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    const char* digits  = "0123456789";
    const char* special = ".-_~!$()*,;:@/?";
    char buf[1000];

    size_t d = 0;

    memset(buf, 0, sizeof(buf));
    d = modp_xml_decode(buf, lower, strlen(lower));
    mu_assert_int_equals(d, strlen(lower));
    mu_assert_str_equals(buf, lower);

    memset(buf, 0, sizeof(buf));
    d = modp_xml_decode(buf, upper, strlen(upper));
    mu_assert_int_equals(d, strlen(upper));
    mu_assert_str_equals(buf, upper);

    memset(buf, 0, sizeof(buf));
    d = modp_xml_decode(buf, digits, strlen(digits));
    mu_assert_int_equals(d, strlen(digits));
    mu_assert_str_equals(buf, digits);

    memset(buf, 0, sizeof(buf));
    d = modp_xml_decode(buf, special, strlen(special));
    mu_assert_int_equals(d, strlen(special));
    mu_assert_str_equals(buf, special);

    return 0;
}
Esempio n. 2
0
static char* testEndian(void)
{
    // this test that "0001" is "00000001"
    char buf[100];
    char result[10];
    char endian[] = {(char)0, (char)0, (char)0, (char)1};
    size_t d = modp_b16_encode(buf, endian, (size_t)4);
    mu_assert_int_equals(8, d);
    mu_assert_str_equals("00000001", buf);
    mu_assert_int_equals('0', buf[0]);
    mu_assert_int_equals('0', buf[1]);
    mu_assert_int_equals('0', buf[2]);
    mu_assert_int_equals('0', buf[3]);
    mu_assert_int_equals('0', buf[4]);
    mu_assert_int_equals('0', buf[5]);
    mu_assert_int_equals('0', buf[6]);
    mu_assert_int_equals('1', buf[7]);

    memset(result, 255, sizeof(result));
    d = modp_b16_decode(result, buf, (size_t)8);
    mu_assert_int_equals(4, d);
    mu_assert_int_equals(endian[0], result[0]);
    mu_assert_int_equals(endian[1], result[1]);
    mu_assert_int_equals(endian[2], result[2]);
    mu_assert_int_equals(endian[3], result[3]);

    return 0;
}
Esempio n. 3
0
static char* testSimpleEscape()
{
    char buf[100];
    const char* s1 = "\\this\nis a string\n";
    const char* s2 = "\\\\this\\nis a string\\n";
    const int len1 = strlen(s1);
    const int len2 = strlen(s2);
    int d = modp_bjavascript_encode(buf, s1, len1);

    mu_assert_int_equals(len2, d);
    mu_assert_str_equals(buf, s2);

    int sz = modp_bjavascript_encode_strlen(s1, len1);
    mu_assert_int_equals(sz, len2);

    /*
     * Test the Raw escape '\' --> '\\'
     */
    char ibuf[] = {'\\', '\0'};
    memset(buf, 0, sizeof(buf));   
    d = modp_bjavascript_encode(buf,ibuf, 1);
    mu_assert_int_equals(buf[0], '\\');
    mu_assert_int_equals(buf[1], '\\');
    mu_assert_int_equals(buf[2], 0);

    return 0;
}
Esempio n. 4
0
/**
 * Tests input where no escaping happens
 */
static char* testNoEscape()
{
    char buf[100];
    const char* s1 = "this is a string";
    const int len1 = strlen(s1);
    int d = modp_bjavascript_encode(buf, s1, len1);

    mu_assert_int_equals(len1, d);
    mu_assert_str_equals(buf, s1);

    int sz = modp_bjavascript_encode_strlen(s1, len1);
    mu_assert_int_equals(sz, len1);

    return 0;
}
/**
 * Bad entity name.. not existant
 */
static char* testXmlDecodeBadNames1(void)
{
    const char* strin = "X&quo;X";
    const char* strout = "X&quo;X";

    char buf[1000];
    size_t d = 0;

    memset(buf, 0, sizeof(buf));
    d = modp_xml_decode(buf, strin, strlen(strin));
    mu_assert_int_equals(d, strlen(strout));
    mu_assert_str_equals(strout, buf);

    return 0;
}
Esempio n. 6
0
static char* testBinaryEscape()
{
    char buf[100];
    const char s1[] = {1,2,3,4,0};
    const char* s2 = "\\x01\\x02\\x03\\x04";
    const int len1 = strlen(s1);
    const int len2 = strlen(s2);
    int d = modp_bjavascript_encode(buf, s1, len1);

    mu_assert_int_equals(len2, d);
    mu_assert_str_equals(buf, s2);

    int sz = modp_bjavascript_encode_strlen(s1, len1);
    mu_assert_int_equals(sz, len2);
    return 0;
}
/**
 * Test characters that should be unchanged
 * Mostly a copy from URL encoding
 */
static char* testXmlDecodeNames(void)
{
    const char* strin = "X"X'X&X>X<X";
    const char* strout = "X\"X'X&X>X<X";

    char buf[1000];
    size_t d = 0;

    memset(buf, 0, sizeof(buf));
    d = modp_xml_decode(buf, strin, strlen(strin));
    mu_assert_int_equals(d, strlen(strout));

    mu_assert_str_equals(strout, buf);

    return 0;
}
static char* testXmlUnicodeCharToUTF8(void)
{
    char buf[1000];
    size_t d = 0;
    int val = 0;

    d = modp_xml_unicode_char_to_utf8(buf, 0x41);
    mu_assert_int_equals(1, d);
    buf[d] = '\0';
    mu_assert_str_equals(buf, "A");

    // Cent symbol
    d = modp_xml_unicode_char_to_utf8(buf, 0x00A2);
    mu_assert_int_equals(2, d);
    val = (unsigned char) buf[0];
    mu_assert_int_equals(val, 0xC2);
    val = (unsigned char) buf[1];
    mu_assert_int_equals(val, 0xA2);

    // Euro symbol
    d = modp_xml_unicode_char_to_utf8(buf, 0x20AC);
    mu_assert_int_equals(3, d);
    val = (unsigned char) buf[0];
    mu_assert_int_equals(val, 0xE2);
    val = (unsigned char) buf[1];
    mu_assert_int_equals(val, 0x82);
    val = (unsigned char) buf[2];
    mu_assert_int_equals(val, 0xAC);

    // Chinese Character
    d = modp_xml_unicode_char_to_utf8(buf, 0x24B62);
    mu_assert_int_equals(4, d);
    val = (unsigned char) buf[0];
    mu_assert_int_equals(val, 0xF0);
    val = (unsigned char) buf[1];
    mu_assert_int_equals(val, 0xA4);
    val = (unsigned char) buf[2];
    mu_assert_int_equals(val, 0xAD);
    val = (unsigned char) buf[3];
    mu_assert_int_equals(val, 0xA2);

    return 0;
}
Esempio n. 9
0
static char* testDQuoteEscape()
{
    char buf[100];
    const char* s1 = "this is a \"string\"\n";
    const char* s2 = "this is a \\\"string\\\"\\n";
    const int len1 = strlen(s1);
    const int len2 = strlen(s2);
    int d = modp_bjavascript_encode(buf, s1, len1);

    mu_assert_int_equals(len2, d);
    mu_assert_str_equals(buf, s2);

    int sz = modp_bjavascript_encode_strlen(s1, len1);
    mu_assert_int_equals(sz, len2);
    char ibuf[] = {'\"', '\0'};
    memset(buf, 0, sizeof(buf));
    d = modp_bjavascript_encode(buf, ibuf, 1);
    mu_assert_int_equals(buf[0], '\\');
    mu_assert_int_equals(buf[1], '\"');
    mu_assert_int_equals(buf[2], '\0');
    return 0;
}