896{
897 static const char *string_hex_tests[] =
898 {
899 "",
900 "-",
901 ",-",
902 "0",
903 "00",
904 "000",
905 "11220",
906 "1122q",
907 "q1122",
908 " aE\t\n\r\n",
909 "01-02",
910 "-,01-02",
911 "01-02-",
912 "aa,BB-ff,-,",
913 "1-2",
914 "010-02",
915 "aa,BBff,-,",
916 "aa,,-BB---ff,-,",
917 "010203040506070809q",
918 };
919
920 DWORD skipped,
flags, expected_err, expected_len, expected_skipped, expected_flags;
925
928 "Expected ERROR_INVALID_PARAMETER, got ret=%d le=%lu\n",
ret,
GetLastError());
931 "Expected ERROR_INVALID_PARAMETER, got ret=%d le=%lu\n",
ret,
GetLastError());
932
936 "Expected ERROR_INVALID_DATA, got ret=%d le=%lu\n",
ret,
GetLastError());
937
941 "Expected ERROR_INVALID_DATA, got ret=%d le=%lu\n",
ret,
GetLastError());
942
944 {
945 bufLen = 0;
949 "%ld: Expected ERROR_INVALID_DATA, got ret=%d le=%lu\n",
i,
ret,
GetLastError());
950 }
951
982
987
1000
1001
1003 bufLen = 4;
1005 ok(!
ret && bufLen == 4 &&
buf[0] == 0,
1006 "Expected ret 0, bufLen 4, buf[0] '\\0', got ret %d, bufLen %ld, buf[0] '%c'\n",
1008
1009
1011 {
1012 bufLen = 0;
1013
1014
1015
1019
1036
1040
1041
1042
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065 }
1066
1068 {
1069 bufLen = 0;
1070
1071
1072
1076
1090
1094
1095
1096
1103 }
1104
1105
1106
1109 if (0)
1110 {
1111
1113 }
1114
1115 bufLen = 8;
1118 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1119
1120 bufLen = 8;
1123 ok(bufLen == 8,
"got length %lu.\n", bufLen);
1124
1125 bufLen = 8;
1128 ok(bufLen == 8,
"got length %lu.\n", bufLen);
1129
1130 bufLen = 8;
1133 ok(!bufLen,
"got length %lu.\n", bufLen);
1134
1135 bufLen = 8;
1139 ok(bufLen == 8,
"got length %lu.\n", bufLen);
1140 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1141
1142 bufLen = 8;
1146 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1147 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1148
1149 bufLen = 8;
1153 ok(bufLen == 8,
"got length %lu.\n", bufLen);
1154 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1155 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1156
1157 bufLen = 8;
1161 ok(bufLen == 8,
"got length %lu.\n", bufLen);
1162 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1163 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1164
1165 bufLen = 1;
1167 skipped = 0xdeadbeef;
1171 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1172 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1174 ok(!skipped,
"got skipped %lu.\n", skipped);
1175
1177 {
1178 for (wide = 0; wide < 2; ++wide)
1179 {
1180 if (wide)
1181 {
1183
1184 while ((str_w[
j] = string_hex_tests[
i][
j]))
1186 }
1189
1190 expected_len = 0xdeadbeef;
1191 expected_skipped = 0xdeadbeef;
1192 expected_flags = 0xdeadbeef;
1193 expected_err =
string_to_hex(wide ? (
void *)str_w : (
void *)string_hex_tests[
i], wide, 0,
NULL,
1194 &expected_len, &expected_skipped, &expected_flags);
1195
1196 bufLen = 0xdeadbeef;
1197 skipped = 0xdeadbeef;
1200 if (wide)
1202 else
1204
1205 ok(bufLen == expected_len,
"got length %lu.\n", bufLen);
1206 ok(skipped == expected_skipped,
"got skipped %lu.\n", skipped);
1207 ok(
flags == expected_flags,
"got flags %lu.\n",
flags);
1208
1209 if (expected_err)
1211 else
1213
1215 expected_len = 8;
1216 expected_skipped = 0xdeadbeef;
1217 expected_flags = 0xdeadbeef;
1219 &expected_len, &expected_skipped, &expected_flags);
1220
1222 bufLen = 8;
1223 skipped = 0xdeadbeef;
1226 if (wide)
1228 else
1230
1232 ok(bufLen == expected_len,
"got length %lu.\n", bufLen);
1233 if (expected_err)
1235 else
1237
1238 ok(bufLen == expected_len,
"got length %lu.\n", bufLen);
1239 ok(skipped == expected_skipped,
"got skipped %lu.\n", skipped);
1240 ok(
flags == expected_flags,
"got flags %lu.\n",
flags);
1241
1243 }
1244 }
1245
1246 bufLen = 1;
1248 skipped = 0xdeadbeef;
1253 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1254 ok(!skipped,
"got skipped %lu.\n", skipped);
1256 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1257 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1258
1259 bufLen = 1;
1261 skipped = 0xdeadbeef;
1266 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1267 ok(!skipped,
"got skipped %lu.\n", skipped);
1269 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1270 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1271
1272 bufLen = 1;
1274 skipped = 0xdeadbeef;
1279 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1280 ok(!skipped,
"got skipped %lu.\n", skipped);
1282 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1283 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1284
1285 bufLen = 1;
1287 skipped = 0xdeadbeef;
1291 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1293 ok(
buf[0] == 1,
"got buf[0] %#x.\n",
buf[0]);
1294 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1295
1296
1297
1298
1299 for (
i = 1;
i < 128; ++
i)
1300 {
1301 char str_a[16];
1302
1303 for (wide = 0; wide < 2; ++wide)
1304 {
1305 if (wide)
1306 {
1309 }
1310 else
1311 {
1314 }
1315
1317
1318 bufLen = 1;
1321 if (wide)
1323 else
1325 ok(bufLen == 1,
"got length %lu.\n", bufLen);
1327 {
1329 ok(!
buf[0],
"got buf[0] %#x.\n",
buf[0]);
1330 ok(
buf[1] == 0xcc,
"got buf[1] %#x.\n",
buf[1]);
1331 }
1332 else
1333 {
1336 {
1338 ok(
buf[1] == 0xcc,
"got buf[0] %#x.\n",
buf[1]);
1339 }
1340 else
1341 {
1342 ok(
buf[0] == 0xcc,
"got buf[0] %#x.\n",
buf[0]);
1343 }
1344 }
1346 }
1347 }
1348}
static LONG string_to_hex(const void *str, BOOL wide, DWORD len, BYTE *hex, DWORD *hex_len, DWORD *skipped, DWORD *ret_flags)
static void decodeBase64WithLen(LPCSTR str, int len, LPCSTR expected, int le)
static void decodeBase64WithFmt(LPCSTR str, DWORD fmt, LPCSTR expected, int le)
static const struct BadString badStrings[]
static void decodeAndCompareBase64_A(LPCSTR toDecode, LPCSTR header, LPCSTR trailer, DWORD useFormat, DWORD expectedFormat, const BYTE *expected, DWORD expectedLen)
static void decodeBase64WithLenBroken(LPCSTR str, int len, LPCSTR expected, int le)
#define CRYPT_STRING_BASE64_ANY