1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* 2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ******************************************************************************* 3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Copyright (C) 2003-2010, International Business Machines 5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Corporation and others. All Rights Reserved. 6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ******************************************************************************* 8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * file name: spreptst.c 9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * encoding: US-ASCII 10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * tab size: 8 (not used) 11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * indentation:4 12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * created on: 2003jul11 14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * created by: Ram Viswanadha 15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <stdlib.h> 17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <string.h> 18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h" 19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_IDNA 21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ustring.h" 23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/usprep.h" 24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cstring.h" 25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cintltst.h" 26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "nfsprep.h" 27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void addUStringPrepTest(TestNode** root); 32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void doStringPrepTest(const char* binFileName, const char* txtFileName, 33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t options, UErrorCode* errorCode); 34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_cs_prep_data(void); 36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_cis_prep_data(void); 37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_mixed_prep_data(void); 38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_cs_prep(void); 39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_cis_prep(void); 40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_mixed_prep(void); 41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestBEAMWarning(void); 42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestCoverage(void); 43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestStringPrepProfiles(void); 44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UStringPrepProfileType getTypeFromProfileName(const char* profileName); 46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void 48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)addUStringPrepTest(TestNode** root) 49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION 51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &Test_nfs4_cs_prep_data, "spreptst/Test_nfs4_cs_prep_data"); 52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &Test_nfs4_cis_prep_data, "spreptst/Test_nfs4_cis_prep_data"); 53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &Test_nfs4_mixed_prep_data, "spreptst/Test_nfs4_mixed_prep_data"); 54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &Test_nfs4_cs_prep, "spreptst/Test_nfs4_cs_prep"); 55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &Test_nfs4_cis_prep, "spreptst/Test_nfs4_cis_prep"); 56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &Test_nfs4_mixed_prep, "spreptst/Test_nfs4_mixed_prep"); 57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &TestBEAMWarning, "spreptst/TestBEAMWarning"); 58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &TestCoverage, "spreptst/TestCoverage"); 60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) addTest(root, &TestStringPrepProfiles, "spreptst/TestStringPrepProfiles"); 61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void 64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Test_nfs4_cs_prep_data(void){ 65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode errorCode = U_ZERO_ERROR; 66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) loadTestData(&errorCode); 67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(errorCode)) { 68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(errorCode)); 69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_verbose("Testing nfs4_cs_prep_ci.txt\n"); 73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) doStringPrepTest("nfscsi","nfs4_cs_prep_ci.txt", USPREP_DEFAULT, &errorCode); 74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_verbose("Testing nfs4_cs_prep_cs.txt\n"); 76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorCode = U_ZERO_ERROR; 77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) doStringPrepTest("nfscss","nfs4_cs_prep_cs.txt", USPREP_DEFAULT, &errorCode); 78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void 82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Test_nfs4_cis_prep_data(void){ 83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode errorCode = U_ZERO_ERROR; 84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_verbose("Testing nfs4_cis_prep.txt\n"); 85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) doStringPrepTest("nfscis","nfs4_cis_prep.txt", USPREP_DEFAULT, &errorCode); 86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void 88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Test_nfs4_mixed_prep_data(void){ 89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode errorCode = U_ZERO_ERROR; 90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) loadTestData(&errorCode); 91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(errorCode)) { 92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(errorCode)); 93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_verbose("Testing nfs4_mixed_prep_s.txt\n"); 97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) doStringPrepTest("nfsmxs","nfs4_mixed_prep_s.txt", USPREP_DEFAULT, &errorCode); 98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorCode = U_ZERO_ERROR; 100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_verbose("Testing nfs4_mixed_prep_p.txt\n"); 101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) doStringPrepTest("nfsmxp","nfs4_mixed_prep_p.txt", USPREP_DEFAULT, &errorCode); 102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const struct ConformanceTestCases 106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *comment; 108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *in; 109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *out; 110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *profile; 111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode expectedStatus; 112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) conformanceTestCases[] = 114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*0*/ 117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Case folding ASCII U+0043 U+0041 U+0046 U+0045", 118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\x43\x41\x46\x45", "\x63\x61\x66\x65", 119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ZERO_ERROR 121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*1*/ 124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Case folding 8bit U+00DF (german sharp s)", 125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xC3\x9F", "\x73\x73", 126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ZERO_ERROR 128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*2*/ 130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-ASCII multibyte space character U+1680", 131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xE1\x9A\x80", NULL, 132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*3*/ 136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-ASCII 8bit control character U+0085", 137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xC2\x85", NULL, 138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*4*/ 142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-ASCII multibyte control character U+180E", 143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xE1\xA0\x8E", NULL, 144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*5*/ 148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-ASCII control character U+1D175", 149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF0\x9D\x85\xB5", NULL, 150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*6*/ 154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Plane 0 private use character U+F123", 155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xEF\x84\xA3", NULL, 156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*7*/ 160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Plane 15 private use character U+F1234", 161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF3\xB1\x88\xB4", NULL, 162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*8*/ 166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Plane 16 private use character U+10F234", 167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF4\x8F\x88\xB4", NULL, 168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*9*/ 172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-character code point U+8FFFE", 173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF2\x8F\xBF\xBE", NULL, 174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*10*/ 178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-character code point U+10FFFF", 179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF4\x8F\xBF\xBF", NULL, 180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* 184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Surrogate code U+DF42", 186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xED\xBD\x82", NULL, "nfs4_cis_prep", UIDNA_DEFAULT, 187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*11*/ 191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Non-plain text character U+FFFD", 192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xEF\xBF\xBD", NULL, 193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*12*/ 197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Ideographic description character U+2FF5", 198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xE2\xBF\xB5", NULL, 199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*13*/ 203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Display property character U+0341", 204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xCD\x81", "\xCC\x81", 205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", U_ZERO_ERROR 206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*14*/ 210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Left-to-right mark U+200E", 211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xE2\x80\x8E", "\xCC\x81", 212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*15*/ 216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Deprecated U+202A", 218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xE2\x80\xAA", "\xCC\x81", 219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*16*/ 223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Language tagging character U+E0001", 224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF3\xA0\x80\x81", "\xCC\x81", 225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*17*/ 229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Language tagging character U+E0042", 230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF3\xA0\x81\x82", NULL, 231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_PROHIBITED_ERROR 233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*18*/ 235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Bidi: RandALCat character U+05BE and LCat characters", 236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\x66\x6F\x6F\xD6\xBE\x62\x61\x72", NULL, 237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_CHECK_BIDI_ERROR 239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*19*/ 241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Bidi: RandALCat character U+FD50 and LCat characters", 242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\x66\x6F\x6F\xEF\xB5\x90\x62\x61\x72", NULL, 243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_CHECK_BIDI_ERROR 245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*20*/ 247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Bidi: RandALCat character U+FB38 and LCat characters", 248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\x66\x6F\x6F\xEF\xB9\xB6\x62\x61\x72", "\x66\x6F\x6F\x20\xd9\x8e\x62\x61\x72", 249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ZERO_ERROR 251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*21*/ 253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Bidi: RandALCat without trailing RandALCat U+0627 U+0031", 254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xD8\xA7\x31", NULL, 255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_CHECK_BIDI_ERROR 257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*22*/ 259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Bidi: RandALCat character U+0627 U+0031 U+0628", 260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xD8\xA7\x31\xD8\xA8", "\xD8\xA7\x31\xD8\xA8", 261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ZERO_ERROR 263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {/*23*/ 265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Unassigned code point U+E0002", 266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xF3\xA0\x80\x82", NULL, 267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRINGPREP_UNASSIGNED_ERROR 269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* // Invalid UTF-8 272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Larger test (shrinking)", 274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "X\xC2\xAD\xC3\xDF\xC4\xB0\xE2\x84\xA1\x6a\xcc\x8c\xc2\xa0\xc2" 275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xaa\xce\xb0\xe2\x80\x80", "xssi\xcc\x87""tel\xc7\xb0 a\xce\xb0 ", 276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ZERO_ERROR 278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Larger test (expanding)", 282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "X\xC3\xDF\xe3\x8c\x96\xC4\xB0\xE2\x84\xA1\xE2\x92\x9F\xE3\x8c\x80", 283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "xss\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88" 284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xe3\x83\xab""i\xcc\x87""tel\x28""d\x29\xe3\x82\xa2\xe3\x83\x91" 285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\xe3\x83\xbc\xe3\x83\x88" 286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "nfs4_cis_prep", 287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ZERO_ERROR 288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }, 289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define MAX_BUFFER_SIZE 1000 293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static int32_t 295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)unescapeData(const char* src, int32_t srcLen, 296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* dest, int32_t destCapacity, 297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode* status){ 298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar b1Stack[MAX_BUFFER_SIZE]; 300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t b1Capacity = MAX_BUFFER_SIZE, 301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) b1Len = 0, 302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) destLen = 0; 303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar* b1 = b1Stack; 305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) b1Len = u_unescape(src,b1,b1Capacity); 307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_strToUTF8(dest, destCapacity, &destLen, b1, b1Len, status); 309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return destLen; 311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void Test_nfs4_cis_prep(void){ 315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i=0; 316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode loadStatus = U_ZERO_ERROR; 317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) loadTestData(&loadStatus); 318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(loadStatus)) { 319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Test could not initialize. Got %s\n", u_errorName(loadStatus)); 320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(i=0;i< (int32_t)(sizeof(conformanceTestCases)/sizeof(conformanceTestCases[0]));i++){ 324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* src = conformanceTestCases[i].in; 325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode expectedStatus = conformanceTestCases[i].expectedStatus; 328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* expectedDest = conformanceTestCases[i].out; 329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* dest = NULL; 330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t destLen = 0; 331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) destLen = nfs4_cis_prepare(src , (int32_t)strlen(src), dest, destLen, &parseError, &status); 333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(status == U_BUFFER_OVERFLOW_ERROR){ 334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dest = (char*) malloc(++destLen); 336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) destLen = nfs4_cis_prepare( src , (int32_t)strlen(src), dest, destLen, &parseError, &status); 337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(expectedStatus != status){ 340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Did not get the expected status for nfs4_cis_prep at index %i. Expected: %s Got: %s - (Are you missing data?)\n",i, u_errorName(expectedStatus), u_errorName(status)); 341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status) && (strcmp(expectedDest,dest) !=0)){ 343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected output for nfs4_cis_prep at index %i.\n", i); 344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) free(dest); 346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* 352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) There are several special identifiers ("who") which need to be 353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) understood universally, rather than in the context of a particular 354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DNS domain. Some of these identifiers cannot be understood when an 355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) NFS client accesses the server, but have meaning when a local process 356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) accesses the file. The ability to display and modify these 357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) permissions is permitted over NFS, even if none of the access methods 358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) on the server understands the identifiers. 359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) Who Description 361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) _______________________________________________________________ 362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "OWNER" The owner of the file. 364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "GROUP" The group associated with the file. 365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "EVERYONE" The world. 366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "INTERACTIVE" Accessed from an interactive terminal. 367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "NETWORK" Accessed via the network. 368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "DIALUP" Accessed as a dialup user to the server. 369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "BATCH" Accessed from a batch job. 370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "ANONYMOUS" Accessed without any authentication. 371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "AUTHENTICATED" Any authenticated user (opposite of 372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ANONYMOUS) 373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "SERVICE" Access from a system service. 374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) To avoid conflict, these special identifiers are distinguish by an 376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) appended "@" and should appear in the form "xxxx@" (note: no domain 377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) name after the "@"). For example: ANONYMOUS@. 378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char* mixed_prep_data[] ={ 380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "OWNER@", 381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "GROUP@", 382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "EVERYONE@", 383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "INTERACTIVE@", 384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "NETWORK@", 385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "DIALUP@", 386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "BATCH@", 387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "ANONYMOUS@", 388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "AUTHENTICATED@", 389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0930\\u094D\\u092E\\u094D\\u0915\\u094D\\u0937\\u0947\\u0924\\u094D@slip129-37-118-146.nc.us.ibm.net", 390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0936\\u094d\\u0930\\u0940\\u092e\\u0926\\u094d@saratoga.pe.utexas.edu", 391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u092d\\u0917\\u0935\\u0926\\u094d\\u0917\\u0940\\u0924\\u093e@dial-120-45.ots.utexas.edu", 392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0905\\u0927\\u094d\\u092f\\u093e\\u092f@woo-085.dorms.waller.net", 393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0905\\u0930\\u094d\\u091c\\u0941\\u0928@hd30-049.hil.compuserve.com", 394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0935\\u093f\\u0937\\u093e\\u0926@pem203-31.pe.ttu.edu", 395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u092f\\u094b\\u0917@56K-227.MaxTNT3.pdq.net", 396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0927\\u0943\\u0924\\u0930\\u093e\\u0937\\u094d\\u091f\\u094d\\u0930@dial-36-2.ots.utexas.edu", 397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0909\\u0935\\u093E\\u091A\\u0943@slip129-37-23-152.ga.us.ibm.net", 398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0927\\u0930\\u094d\\u092e\\u0915\\u094d\\u0937\\u0947\\u0924\\u094d\\u0930\\u0947@ts45ip119.cadvision.com", 399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0915\\u0941\\u0930\\u0941\\u0915\\u094d\\u0937\\u0947\\u0924\\u094d\\u0930\\u0947@sdn-ts-004txaustP05.dialsprint.net", 400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0938\\u092e\\u0935\\u0947\\u0924\\u093e@bar-tnt1s66.erols.com", 401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u092f\\u0941\\u092f\\u0941\\u0924\\u094d\\u0938\\u0935\\u0903@101.st-louis-15.mo.dial-access.att.net", 402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u092e\\u093e\\u092e\\u0915\\u093e\\u0903@h92-245.Arco.COM", 403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u092a\\u093e\\u0923\\u094d\\u0921\\u0935\\u093e\\u0936\\u094d\\u091a\\u0948\\u0935@dial-13-2.ots.utexas.edu", 404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0915\\u093f\\u092e\\u0915\\u0941\\u0930\\u094d\\u0935\\u0924@net-redynet29.datamarkets.com.ar", 405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0938\\u0902\\u091c\\u0935@ccs-shiva28.reacciun.net.ve", 406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c30\\u0c18\\u0c41\\u0c30\\u0c3e\\u0c2e\\u0c4d@7.houston-11.tx.dial-access.att.net", 407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c35\\u0c3f\\u0c36\\u0c4d\\u0c35\\u0c28\\u0c3e\\u0c27@ingw129-37-120-26.mo.us.ibm.net", 408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c06\\u0c28\\u0c02\\u0c26\\u0c4d@dialup6.austintx.com", 409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0C35\\u0C26\\u0C4D\\u0C26\\u0C3F\\u0C30\\u0C3E\\u0C1C\\u0C41@dns2.tpao.gov.tr", 410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c30\\u0c3e\\u0c1c\\u0c40\\u0c35\\u0c4d@slip129-37-119-194.nc.us.ibm.net", 411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c15\\u0c36\\u0c30\\u0c2c\\u0c3e\\u0c26@cs7.dillons.co.uk.203.119.193.in-addr.arpa", 412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c38\\u0c02\\u0c1c\\u0c40\\u0c35\\u0c4d@swprd1.innovplace.saskatoon.sk.ca", 413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c15\\u0c36\\u0c30\\u0c2c\\u0c3e\\u0c26@bikini.bologna.maraut.it", 414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c38\\u0c02\\u0c1c\\u0c40\\u0c2c\\u0c4d@node91.subnet159-198-79.baxter.com", 415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c38\\u0c46\\u0c28\\u0c4d\\u0c17\\u0c41\\u0c2a\\u0c4d\\u0c24@cust19.max5.new-york.ny.ms.uu.net", 416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c05\\u0c2e\\u0c30\\u0c47\\u0c02\\u0c26\\u0c4d\\u0c30@balexander.slip.andrew.cmu.edu", 417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c39\\u0c28\\u0c41\\u0c2e\\u0c3e\\u0c28\\u0c41\\u0c32@pool029.max2.denver.co.dynip.alter.net", 418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c30\\u0c35\\u0c3f@cust49.max9.new-york.ny.ms.uu.net", 419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c15\\u0c41\\u0c2e\\u0c3e\\u0c30\\u0c4d@s61.abq-dialin2.hollyberry.com", 420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c35\\u0c3f\\u0c36\\u0c4d\\u0c35\\u0c28\\u0c3e\\u0c27@\\u0917\\u0928\\u0947\\u0936.sanjose.ibm.com", 421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c06\\u0c26\\u0c3f\\u0c24\\u0c4d\\u0c2f@www.\\u00E0\\u00B3\\u00AF.com", 422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0C15\\u0C02\\u0C26\\u0C4D\\u0C30\\u0C47\\u0C17\\u0C41\\u0c32@www.\\u00C2\\u00A4.com", 423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c36\\u0c4d\\u0c30\\u0c40\\u0C27\\u0C30\\u0C4D@www.\\u00C2\\u00A3.com", 424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c15\\u0c02\\u0c1f\\u0c2e\\u0c36\\u0c46\\u0c1f\\u0c4d\\u0c1f\\u0c3f@\\u0025", 425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c2e\\u0c3e\\u0c27\\u0c35\\u0c4d@\\u005C\\u005C", 426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u0c26\\u0c46\\u0c36\\u0c46\\u0c1f\\u0c4d\\u0c1f\\u0c3f@www.\\u0021.com", 427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "test@www.\\u0024.com", 428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "help@\\u00C3\\u00BC.com", 429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void 434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Test_nfs4_mixed_prep(void){ 435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode loadStatus = U_ZERO_ERROR; 436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) loadTestData(&loadStatus); 437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(loadStatus)) { 438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Test could not initialize. Got %s\n", u_errorName(loadStatus)); 439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i=0; 444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char src[MAX_BUFFER_SIZE]; 445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLen; 446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(i=0; i< LENGTHOF(mixed_prep_data); i++){ 448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t destLen=0; 449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* dest = NULL; 450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) srcLen = unescapeData(mixed_prep_data[i], (int32_t)strlen(mixed_prep_data[i]), src, MAX_BUFFER_SIZE, &status); 453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)){ 454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Conversion of data at index %i failed. Error: %s\n", i, u_errorName(status)); 455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) continue; 456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) destLen = nfs4_mixed_prepare(src, srcLen, NULL, 0, &parseError, &status); 458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(status == U_BUFFER_OVERFLOW_ERROR){ 459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dest = (char*)malloc(++destLen); 461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) destLen = nfs4_mixed_prepare(src, srcLen, dest, destLen, &parseError, &status); 462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) free(dest); 464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)){ 465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Preparation of string at index %i failed. Error: %s - (Are you missing data?)\n", i, u_errorName(status)); 466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) continue; 467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* test the error condition */ 471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* source = "OWNER@oss.software.ibm.com"; 473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char dest[MAX_BUFFER_SIZE]; 474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char src[MAX_BUFFER_SIZE] = {0}; 475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLen = unescapeData(source, (int32_t)strlen(source), src, MAX_BUFFER_SIZE, &status); 479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) nfs4_mixed_prepare(src, srcLen, dest, MAX_BUFFER_SIZE, &parseError, &status); 481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(status != U_PARSE_ERROR){ 483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected error.Expected: %s Got: %s\n", u_errorName(U_PARSE_ERROR), u_errorName(status)); 484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void 491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Test_nfs4_cs_prep(void){ 492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode errorCode = U_ZERO_ERROR; 493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) loadTestData(&errorCode); 494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(errorCode)) { 495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(errorCode)); 496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* BiDi checking is turned off */ 501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *source = "\\uC138\\uACC4\\uC758\\uBAA8\\uB4E0\\uC0AC\\uB78C\\uB4E4\\uC774\\u0644\\u064A\\u0647\\uD55C\\uAD6D\\uC5B4\\uB97C\\uC774\\uD574\\uD55C\\uB2E4\\uBA74"; 502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char src[MAX_BUFFER_SIZE]={'\0'}; 504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLen = unescapeData(source, (int32_t)strlen(source), src, MAX_BUFFER_SIZE, &status); 506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char dest[MAX_BUFFER_SIZE] = {'\0'}; 508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t destLen = nfs4_cs_prepare(src, srcLen, dest, MAX_BUFFER_SIZE, FALSE, &parseError, &status); 509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)){ 510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("StringPrep failed for case: BiDi Checking Turned OFF with error: %s\n", u_errorName(status)); 511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(strcmp(dest,src)!=0){ 513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected output for case: BiDi Checking Turned OFF\n"); 514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(destLen != srcLen){ 516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected length for the output for case: BiDi Checking Turned OFF. Expected: %i Got: %i\n", srcLen, destLen); 517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Conversion failed for case: BiDi Checking Turned OFF with error: %s\n", u_errorName(status)); 520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Normalization turned off */ 524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *source = "www.\\u00E0\\u00B3\\u00AF.com"; 525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char src[MAX_BUFFER_SIZE]={'\0'}; 527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLen = unescapeData(source, (int32_t)strlen(source), src, MAX_BUFFER_SIZE, &status); 529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char dest[MAX_BUFFER_SIZE] = {'\0'}; 531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t destLen = nfs4_cs_prepare(src, srcLen, dest, MAX_BUFFER_SIZE, FALSE, &parseError, &status); 532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)){ 533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("StringPrep failed for case: Normalization Turned OFF with error: %s\n", u_errorName(status)); 534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(strcmp(dest,src)!=0){ 536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected output for case: Normalization Turned OFF\n"); 537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(destLen != srcLen){ 539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected length for the output for case: Normalization Turned OFF. Expected: %i Got: %i\n", srcLen, destLen); 540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Conversion failed for case: Normalization Turned OFF with error: %s\n", u_errorName(status)); 543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* case mapping turned off */ 547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *source = "THISISATEST"; 548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char src[MAX_BUFFER_SIZE]={'\0'}; 550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLen = unescapeData(source, (int32_t)strlen(source), src, MAX_BUFFER_SIZE, &status); 552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char dest[MAX_BUFFER_SIZE] = {'\0'}; 554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t destLen = nfs4_cs_prepare(src, srcLen, dest, MAX_BUFFER_SIZE, TRUE, &parseError, &status); 555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)){ 556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("StringPrep failed for case: Case Mapping Turned OFF with error: %s\n", u_errorName(status)); 557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(strcmp(dest,src)!=0){ 559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected output for case: Case Mapping Turned OFF\n"); 560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(destLen != srcLen){ 562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected length for the output for case: Case Mapping Turned OFF. Expected: %i Got: %i\n", srcLen, destLen); 563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Conversion failed for case: Case Mapping Turned OFF with error: %s\n", u_errorName(status)); 566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* case mapping turned on */ 570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *source = "THISISATEST"; 571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *expected = "thisisatest"; 572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char src[MAX_BUFFER_SIZE]={'\0'}; 574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char exp[MAX_BUFFER_SIZE]={'\0'}; 575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLen = unescapeData(source, (int32_t)strlen(source), src, MAX_BUFFER_SIZE, &status); 577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t expLen = unescapeData(expected, (int32_t)strlen(expected), exp, MAX_BUFFER_SIZE, &status); 578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char dest[MAX_BUFFER_SIZE] = {'\0'}; 580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t destLen = nfs4_cs_prepare(src, srcLen, dest, MAX_BUFFER_SIZE, FALSE, &parseError, &status); 581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)){ 582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("StringPrep failed for case: Case Mapping Turned On with error: %s\n", u_errorName(status)); 583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(strcmp(exp, dest)!=0){ 585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected output for case: Case Mapping Turned On!\n"); 586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(destLen != expLen){ 588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Did not get the expected length for the outputfor case: Case Mapping Turned On. Expected: %i Got: %i\n", strlen(expected), destLen); 589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Conversion failed for case: Case Mapping Turned ON with error: %s\n", u_errorName(status)); 592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestBEAMWarning(){ 599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UStringPrepProfile* profile = NULL; 602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* get the test data path */ 603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *testdatapath = NULL; 604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar src =0x0000; 605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testdatapath = loadTestData(&status); 606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(status)); 608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* open the profile */ 611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) profile = usprep_open(testdatapath, "nfscis", &status); 612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_prepare(profile,&src , 0, NULL, 0, USPREP_DEFAULT, &parseError, &status); 613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_close(profile); 615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestCoverage(void) { 618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_USELESS_COLLATOR_ERROR; 619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UParseError parseError; 620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_open(NULL, NULL, &status); 622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status != U_USELESS_COLLATOR_ERROR) { 623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("usprep_open didn't react correctly to a bad UErrorCode\n"); 624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_prepare(NULL, NULL, 0, NULL, 0, USPREP_DEFAULT, &parseError, &status); 626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status != U_USELESS_COLLATOR_ERROR) { 627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("usprep_prepare didn't react correctly to a bad UErrorCode\n"); 628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_prepare(NULL, NULL, 0, NULL, 0, USPREP_DEFAULT, &parseError, &status); 631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status != U_ILLEGAL_ARGUMENT_ERROR) { 632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("usprep_prepare didn't check its arguments\n"); 633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Don't crash */ 636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_close(NULL); 637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** Profile Test ****/ 640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define SPREP_PROFILE_TEST_MAX_LENGTH 64 642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* The format of the test cases should be the following: 643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* { 644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Profile name 645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* src string1 646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* expected result1 647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* src string2 648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* expected result2 649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* ... 650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* } 651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* 652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* *Note: For expected failures add FAIL to beginning of the source string and for expected result use "FAIL". 653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char *profile_test_case[] = { 655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC4013_SASLPREP ****/ 656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC4013_SASLPREP", 657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "user:\\u00A0\\u0AC6\\u1680\\u00ADpassword1", 658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "user: \\u0AC6 password1", 659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC4011_MIB ****/ 661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC4011_MIB", 662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Policy\\u034F\\u200DBase\\u0020d\\u1806\\u200C", 663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "PolicyBase d", 664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC4505_TRACE ****/ 666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC4505_TRACE", 667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Anony\\u0020\\u00A0mous\\u3000\\u0B9D\\u034F\\u00AD", 668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Anony\\u0020\\u00A0mous\\u3000\\u0B9D\\u034F\\u00AD", 669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC4518_LDAP ****/ 671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC4518_LDAP", 672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Ldap\\uFB01\\u00ADTest\\u0020\\u00A0\\u2062ing", 673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "LdapfiTest ing", 674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC4518_LDAP_CI ****/ 676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC4518_LDAP_CI", 677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Ldap\\uFB01\\u00ADTest\\u0020\\u00A0\\u2062ing12345", 678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "ldapfitest ing12345", 679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3920_RESOURCEPREP ****/ 681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3920_RESOURCEPREP", 682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "ServerXM\\u2060\\uFE00\\uFE09PP s p ", 683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "ServerXMPP s p ", 684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3920_NODEPREP ****/ 686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3920_NODEPREP", 687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "Server\\u200DXMPPGreEK\\u03D0", 688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "serverxmppgreek\\u03B2", 689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3722_ISCI ****/ 691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3722_ISCSI", 692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "InternetSmallComputer\\uFB01\\u0032\\u2075Interface", 693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "internetsmallcomputerfi25interface", 694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "FAILThisShouldFailBecauseOfThis\\u002F", 695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "FAIL", 696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3530_NFS4_CS_PREP ****/ 698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3530_NFS4_CS_PREP", 699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u00ADUser\\u2060Name@ \\u06DDDOMAIN.com", 700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "UserName@ \\u06DDDOMAIN.com", 701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3530_NFS4_CS_PREP_CI ****/ 703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3530_NFS4_CS_PREP_CI", 704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\\u00ADUser\\u2060Name@ \\u06DDDOMAIN.com", 705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "username@ \\u06DDdomain.com", 706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3530_NFS4_CIS_PREP ****/ 708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3530_NFS4_CIS_PREP", 709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "AA\\u200C\\u200D @@DomAin.org", 710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "aa @@domain.org", 711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3530_NFS4_MIXED_PREP_PREFIX ****/ 713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3530_NFS4_MIXED_PREP_PREFIX", 714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "PrefixUser \\u007F\\uFB01End", 715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "PrefixUser \\u007FfiEnd", 716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**** RFC3530_NFS4_MIXED_PREP_SUFFIX ****/ 718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "RFC3530_NFS4_MIXED_PREP_SUFFIX", 719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "SuffixDomain \\u007F\\uFB01EnD", 720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "suffixdomain \\u007Ffiend", 721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UStringPrepProfileType getTypeFromProfileName(const char* profileName) { 724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (uprv_strcmp(profileName, "RFC4013_SASLPREP") == 0) { 725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC4013_SASLPREP; 726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC4011_MIB") == 0) { 727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC4011_MIB; 728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC4505_TRACE") == 0) { 729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC4505_TRACE; 730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC4518_LDAP") == 0) { 731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC4518_LDAP; 732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC4518_LDAP_CI") == 0) { 733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC4518_LDAP_CI; 734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3920_RESOURCEPREP") == 0) { 735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3920_RESOURCEPREP; 736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3920_NODEPREP") == 0) { 737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3920_NODEPREP; 738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3722_ISCSI") == 0) { 739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3722_ISCSI; 740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3530_NFS4_CS_PREP") == 0) { 741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3530_NFS4_CS_PREP; 742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3530_NFS4_CS_PREP_CI") == 0) { 743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3530_NFS4_CS_PREP_CI; 744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3530_NFS4_CIS_PREP") == 0) { 745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3530_NFS4_CIS_PREP; 746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3530_NFS4_MIXED_PREP_PREFIX") == 0) { 747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3530_NFS4_MIXED_PREP_PREFIX; 748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (uprv_strcmp(profileName, "RFC3530_NFS4_MIXED_PREP_SUFFIX") == 0) { 749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3530_NFS4_MIXED_PREP_SUFFIX; 750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Should not happen. */ 752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return USPREP_RFC3491_NAMEPREP; 753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestStringPrepProfiles(void) { 755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *profileName = NULL; 757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar src[SPREP_PROFILE_TEST_MAX_LENGTH]; 758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar expected[SPREP_PROFILE_TEST_MAX_LENGTH]; 759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar result[SPREP_PROFILE_TEST_MAX_LENGTH]; 760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t srcLength, resultLength, expectedLength; 761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i, testNum = 0; 762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UStringPrepProfile *sprep = NULL; 763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (i = 0; i < LENGTHOF(profile_test_case); i++) { 765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (uprv_strstr(profile_test_case[i], "RFC")) { 766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (sprep != NULL) { 767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_close(sprep); 768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprep = NULL; 769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) profileName = profile_test_case[i]; 771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprep = usprep_openByType(getTypeFromProfileName(profileName), &status); 772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(status)) { 773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_data_err("Unable to open String Prep Profile with: %s\n", profileName); 774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testNum = 0; 778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) continue; 779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) srcLength = resultLength = expectedLength = SPREP_PROFILE_TEST_MAX_LENGTH; 781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testNum++; 783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) srcLength = u_unescape(profile_test_case[i], src, srcLength); 785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) expectedLength = u_unescape(profile_test_case[++i], expected, expectedLength); 786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) resultLength = usprep_prepare(sprep, src, srcLength, result, resultLength, USPREP_ALLOW_UNASSIGNED, NULL, &status); 788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(status)) { 789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (uprv_strstr(profile_test_case[i], "FAIL") == NULL) { 790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Error occurred on test[%d] for profile: %s\n", testNum, profileName); 791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Error is expected so reset the status. */ 793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (uprv_strstr(profile_test_case[i], "FAIL") != NULL) { 797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Error expected on test[%d] for profile: %s\n", testNum, profileName); 798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (resultLength != expectedLength || u_strcmp(result, expected) != 0) { 801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log_err("Results do not match expected on test[%d] for profile: %s\n", testNum, profileName); 802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (sprep != NULL) { 807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usprep_close(sprep); 808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* 814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Hey, Emacs, please set the following: 815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Local Variables: 817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * indent-tabs-mode: nil 818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * End: 819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 821