Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

334 lines
7.4 KiB

/*
* Test memcpy() function.
*/
char buffer[100];
#include <stdio.h>
#include <memory.h>
#define FALSE 0
#define TRUE 1
#define NTUL 7
#define TEST16 4
#define TEST32 8
#define BUFSIZE 256
void printbuf(char *identifier, char *buf, int length)
{
int i;
printf("%s = '", identifier);
for (i = 0; i < length; i++)
printf("%c", buf[i]);
printf("'\n");
}
void main()
{
int i, j, n, k, l;
int rc;
char *s1, *s2;
char TavEqFailed = FALSE;
char TvaEqFailed = FALSE;
char TavltFailed = FALSE;
char TvaltFailed = FALSE;
char TavgtFailed = FALSE;
char TvagtFailed = FALSE;
char TvveqFailed = FALSE;
char TvvltFailed = FALSE;
char TvvgtFailed = FALSE;
int Tmisc = 0;
unsigned long source1_16[TEST16] = {
0x00003000,
0x30003000,
0x30003000,
0x36003000
};
unsigned long source2_16[TEST16] = {
0x00003000,
0x30003000,
0x30003000,
0x00000000
};
unsigned long tul[NTUL] = {
0x35004600,
0x37004600,
0x36002f00,
0x37002f00,
0x30004600,
0x30003000,
0x36003000
};
int tul_test[NTUL] = {
-1,
-1,
+1,
+1,
-1,
+1,
0
};
struct {
double dummy;
char source1[BUFSIZE];
char source2[BUFSIZE];
} buffer;
char source32[32] = "0X0042036C 002477CD BREAK 0x91DF";
char source[BUFSIZE];
for (j = 0; j < BUFSIZE; ) {
for (i = 0; i <= j % 32; i++, j++) {
buffer.source1[j] = source32[i];
buffer.source2[j] = source32[i];
}
}
j = BUFSIZE;
s1 = buffer.source1;
s2 = buffer.source2;
while (j--) {
if (*s1++ != *s2++) {
printf("\n\nbuffer.source1 != buffer.source2, exiting test!!!\n");
exit(-1);
}
}
if (memcmp(buffer.source1, buffer.source2, BUFSIZE) != 0) {
printf("\n\tbuffer.source1 != buffer.source2, exiting test!!!\n");
exit(-1);
}
/* Test for zero length */
for (i = 0; i < BUFSIZE; i++ ) {
int l;
s1 = &(buffer.source1[i]);
s2 = &(buffer.source2[i]);
l = 0;
rc = memcmp(s1, s2, l);
if (rc) {
printf("%s, line #%d: Zero length test failed!!!\n", __FILE__, __LINE__);
break;
}
}
for (k = BUFSIZE; k > 0; k-- ) {
for (n = 0; n < k; n++) {
char c;
int l;
int m;
/* Test with aligned start and variable end */
if (!TavEqFailed) {
s1 = buffer.source1;
s2 = buffer.source2;
l = k;
rc = memcmp(s1, s2, l);
if (rc != 0) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte aligned block equal test failed!!!\n", __FILE__, __LINE__, k);
TavEqFailed = TRUE;
}
}
/* Test with variable start and aligned end */
if (!TvaEqFailed) {
s1 = &(buffer.source1[n]);
s2 = &(buffer.source2[n]);
l = k - n;
rc = memcmp(s1, s2, l);
if (rc != 0) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte unaligned block equal test failed!!!\n", __FILE__, __LINE__, k);
TvaEqFailed = TRUE;
}
}
/* Test with aligned start and variable end */
s1 = buffer.source1;
s2 = buffer.source2;
l = k - n;
for (m = 0; m < l && !TavltFailed; m++) {
c = s1[m];
s1[m] -= 1;
rc = memcmp(s1, s2, l);
if (rc != -1) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte aligned block less than test failed!!!\n", __FILE__, __LINE__, k);
TavltFailed = TRUE;
}
s1[m] = c;
}
/* Test with variable start and aligned end */
s1 = &(buffer.source1[n]);
s2 = &(buffer.source2[n]);
l = k - n;
for (m = 0; m < l && !TvaltFailed; m++) {
c = s1[m];
s1[m] -= 1;
rc = memcmp(s1, s2, l);
if (rc != -1) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte unaligned block less than test failed!!!\n", __FILE__, __LINE__, k);
TvaltFailed = TRUE;
}
s1[m] = c;
}
/* Test with aligned start and variable end */
s1 = buffer.source1;
s2 = buffer.source2;
l = k - n;
for (m = 0; m < l && !TavgtFailed; m++) {
c = s1[m];
s1[m] += 1;
rc = memcmp(s1, s2, l);
if (rc != 1) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte aligned block greater than test failed!!!\n", __FILE__, __LINE__, k);
TavgtFailed = TRUE;
}
s1[m] = c;
}
/* Test with variable start and aligned end */
s1 = &(buffer.source1[n]);
s2 = &(buffer.source2[n]);
l = k - n;
for (m = 0; m < l && !TvagtFailed; m++) {
c = s1[m];
s1[m] += 1;
rc = memcmp(s1, s2, l);
if (rc != 1) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte unaligned block greater than test failed!!!\n", __FILE__, __LINE__, k);
TvagtFailed = TRUE;
}
s1[m] = c;
}
}
}
for (k = BUFSIZE; k > 0; k-- ) {
for (n = 0; n < k/2; n++) {
char c;
int m;
/* Test equal with variable start and end */
if (!TvveqFailed) {
l = k - 2*n;
s1 = &(buffer.source1[n]);
s2 = &(buffer.source2[n]);
rc = memcmp(s1, s2, l);
if (rc != 0) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte variable block equal test failed!!!\n", __FILE__, __LINE__, l);
TvveqFailed = TRUE;
}
}
/* Test less than with variable start and end */
l = k - 2*n;
s1 = buffer.source1;
s2 = buffer.source2;
for (m = 0; m < l && !TvvltFailed; m++) {
c = s1[m];
s1[m] -= 1;
rc = memcmp(s1, s2, l);
if (rc != -1) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte variable block less than test failed!!!\n", __FILE__, __LINE__, l);
TvvltFailed = TRUE;
}
s1[m] = c;
}
/* Test greater than with variable start and end */
l = k - 2*n;
s1 = buffer.source1;
s2 = buffer.source2;
for (m = 0; m < l && !TvvgtFailed; m++) {
c = s1[m];
s1[m] += 1;
rc = memcmp(s1, s2, l);
if (rc != 1) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: %d byte variable block greater than test failed!!!\n", __FILE__, __LINE__, l);
TvvgtFailed = TRUE;
}
s1[m] = c;
}
}
}
/* Misc test1 */
for (k = 0; k < NTUL; k++) {
source2_16[3] = tul[k];
rc = memcmp(source1_16,source2_16,TEST16*sizeof(unsigned long));
if (rc != tul_test[k]) {
printf("source1_16 = ");
for (i = 0; i < TEST16*sizeof(unsigned long); i++)
printf("%2.2x ", ((char *)source1_16)[i]);
printf("\n");
printf("source2_16 = ");
for (i = 0; i < TEST16*sizeof(unsigned long); i++)
printf("%2.2x ", ((char *)source2_16)[i]);
printf("%s, line #%d: Misc Test #1, case #%d of %d failed!!!\n", __FILE__, __LINE__, k+1, NTUL);
printf("Return Code = %d, Should be = %d\n",rc,tul_test[k]);
Tmisc++;
}
}
/* Misc test2 */
l = 32;
buffer.source2[0] = '"';
for (i = 0; i < l; i++) {
buffer.source1[i] = source32[i];
buffer.source2[i+1] = source32[i];
}
buffer.source2[l+1] = '"';
s1 = &(buffer.source1[0]);
s2 = &(buffer.source2[1]);
if (0 != memcmp(s1, s2, l)) {
printbuf("source1", s1, l);
printbuf("source2", s2, l);
printf("%s, line #%d: Misc Test #2 failed!!!\n", __FILE__, __LINE__);
Tmisc++;
}
rc = TavEqFailed + TvaEqFailed + TavltFailed + TvaltFailed + TavgtFailed + TvagtFailed + TvveqFailed + TvvltFailed + TvvgtFailed + Tmisc;
if (rc) {
printf("\n\tMEMCMP failed %d tests!!!\n", rc);
exit(rc);
} else {
printf("\n\tMEMCMP passed all tests!!!\n");
exit(0);
}
}