112-bit modulus bug - result is never 0.

This commit is contained in:
hooper114 2009-08-03 22:56:44 +00:00
parent 4a31544645
commit af26cb69f2
2 changed files with 65 additions and 2 deletions

View File

@ -595,6 +595,13 @@ int imail(struct zint_symbol *symbol, unsigned char source[])
(y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) + (y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) +
(y_reg[1] * 2) + y_reg[0]; (y_reg[1] * 2) + y_reg[0];
for(i = 0; i < 8; i++) {
if(codeword[i] == 1365) {
codeword[i] = 0;
codeword[i + 1]++;
}
}
/* printf("Codewords 3: "); /* printf("Codewords 3: ");
for(i = 0; i < 10; i++) { for(i = 0; i < 10; i++) {
printf("%d ", codeword[i]); printf("%d ", codeword[i]);

View File

@ -313,18 +313,24 @@ void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start
int i, j, k, l, longueur; int i, j, k, l, longueur;
short int accum[112], x_reg[112], y_reg[112]; short int accum[112], x_reg[112], y_reg[112];
int debug = 0;
if(debug) printf("\nEntering byte mode at position %d\n", start);
if(length == 1) { if(length == 1) {
chainemc[*(mclength)] = 913; chainemc[*(mclength)] = 913;
chainemc[*(mclength) + 1] = chaine[start]; chainemc[*(mclength) + 1] = chaine[start];
if(debug) { printf("913 %d\n", chainemc[*(mclength) + 1]); }
*(mclength) = *(mclength) + 2; *(mclength) = *(mclength) + 2;
} else { } else {
/* select the switch for multiple of 6 bytes */ /* select the switch for multiple of 6 bytes */
if (length % 6 == 0) { if (length % 6 == 0) {
chainemc[*(mclength)] = 924; chainemc[*(mclength)] = 924;
if(debug) printf("924 ");
*(mclength) = *(mclength) + 1; *(mclength) = *(mclength) + 1;
} else { } else {
chainemc[*(mclength)] = 901; chainemc[*(mclength)] = 901;
if(debug) printf("901 ");
*(mclength) = *(mclength) + 1; *(mclength) = *(mclength) + 1;
} }
@ -342,6 +348,7 @@ void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start
y_reg[i] = 0; y_reg[i] = 0;
} }
/* Load 6 bytes of data into the Y register */
longueur = 6; longueur = 6;
for(k = 0; k < longueur; k++) { for(k = 0; k < longueur; k++) {
for(i = 0; i < 8; i++) { for(i = 0; i < 8; i++) {
@ -400,20 +407,47 @@ void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start
(y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) + (y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) +
(y_reg[1] * 2) + y_reg[0]; (y_reg[1] * 2) + y_reg[0];
for(i = 0; i < 4; i++) {
if(cw[i] == 900) {
cw[i] = 0;
cw[i + 1]++;
}
}
for(i = 0; i < 5; i++) { for(i = 0; i < 5; i++) {
chainemc[*(mclength)] = cw[4 - i]; chainemc[*(mclength)] = cw[4 - i];
*(mclength) = *(mclength) + 1; *(mclength) = *(mclength) + 1;
} }
if(debug) {
for(k = 0; k < longueur; k++) {
printf("%d ", chaine[start + j + k]);
}
printf(">> ");
for(i = 0; i < 5; i++) {
printf("%d ", cw[4 - i]);
}
printf("\n");
}
} else { } else {
/* If there remains a group of less than 6 bytes */ /* If there remains a group of less than 6 bytes */
for(k = 0; k < longueur; k++) { for(k = 0; k < longueur; k++) {
chainemc[*(mclength)] = chaine[start + j + k]; chainemc[*(mclength)] = chaine[start + j + k];
*(mclength) = *(mclength) + 1; *(mclength) = *(mclength) + 1;
} }
if(debug) {
for(k = 0; k < longueur; k++) {
printf("%d ", chaine[start + j + k]);
}
printf(">> ");
for(k = 0; k < longueur; k++) {
printf("%d ", chaine[start + j + k]);
}
printf("\n");
}
} }
j += longueur; j += longueur;
} }
} }
} }
@ -488,6 +522,7 @@ int pdf417(struct zint_symbol *symbol, unsigned char chaine[])
int i, k, j, indexchaine, indexliste, mode, longueur, loop, mccorrection[520], offset; int i, k, j, indexchaine, indexliste, mode, longueur, loop, mccorrection[520], offset;
int total, chainemc[2700], mclength, c1, c2, c3, dummy[35], codeerr; int total, chainemc[2700], mclength, c1, c2, c3, dummy[35], codeerr;
char codebarre[100], pattern[580]; char codebarre[100], pattern[580];
int debug = 0;
codeerr = 0; codeerr = 0;
@ -515,6 +550,19 @@ int pdf417(struct zint_symbol *symbol, unsigned char chaine[])
/* 474 */ /* 474 */
pdfsmooth(&indexliste); pdfsmooth(&indexliste);
if(debug) {
printf("Initial block pattern:\n");
for(i = 0; i < indexliste; i++) {
printf("Len: %d Type: ", liste[0][i]);
switch(liste[1][i]) {
case TEX: printf("Text\n"); break;
case BYT: printf("Byte\n"); break;
case NUM: printf("Number\n"); break;
default: printf("ERROR\n"); break;
}
}
}
/* 541 - now compress the data */ /* 541 - now compress the data */
indexchaine = 0; indexchaine = 0;
mclength = 0; mclength = 0;
@ -533,6 +581,14 @@ int pdf417(struct zint_symbol *symbol, unsigned char chaine[])
indexchaine = indexchaine + liste[0][i]; indexchaine = indexchaine + liste[0][i];
} }
if(debug) {
printf("\nCompressed data stream:\n");
for(i = 0; i < mclength; i++) {
printf("%d ", chainemc[i]);
}
printf("\n\n");
}
/* 752 - Now take care of the number of CWs per row */ /* 752 - Now take care of the number of CWs per row */
if (symbol->option_1 < 0) { if (symbol->option_1 < 0) {
/* note that security level 8 is never used automatically */ /* note that security level 8 is never used automatically */