Skip to content

Commit c0bac0e

Browse files
committed
Ignore obviously suboptimal encodings for DataMatrix AUTO mode
DEVSIX-1845
1 parent d045c19 commit c0bac0e

File tree

2 files changed

+17
-20
lines changed

2 files changed

+17
-20
lines changed

barcodes/src/main/java/com/itextpdf/barcodes/BarcodeDataMatrix.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,29 +1246,28 @@ private int getEncodation(byte[] text, int textOffset, int textSize, byte[] data
12461246
f[3][0] = b256Encodation(text, textOffset, 1, dataDynamic[3], dataOffset, dataSize, 0, -1, dataOffset);
12471247
f[4][0] = X12Encodation(text, textOffset, 1, dataDynamic[4], dataOffset, dataSize, 0, -1, dataOffset);
12481248
f[5][0] = EdifactEncodation(text, textOffset, 1, dataDynamic[5], dataOffset, dataSize, 0, -1, dataOffset, sizeFixed);
1249-
int[] dataNewOffset = new int[6];
12501249
for (int i = 1; i < textSize; i++) {
12511250
int tempForMin[] = new int[6];
1252-
for (int k = 0; k < 6; k++) {
1253-
dataNewOffset[k] = f[k][i - 1] >= 0 ? f[k][i - 1] : Integer.MAX_VALUE;
1254-
}
12551251
for (int currEnc = 0; currEnc < 6; currEnc++) {
12561252
byte[][] dataDynamicInner = new byte[6][data.length];
12571253
for (int prevEnc = 0; prevEnc < 6; prevEnc++) {
12581254
System.arraycopy(dataDynamic[prevEnc], 0, dataDynamicInner[prevEnc], 0, data.length);
1259-
if (currEnc == 0)
1260-
tempForMin[prevEnc] = asciiEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset);
1261-
if (currEnc == 1)
1262-
tempForMin[prevEnc] = C40OrTextEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], true, i, prevEnc + 1, dataOffset);
1263-
if (currEnc == 2)
1264-
tempForMin[prevEnc] = C40OrTextEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], false, i, prevEnc + 1, dataOffset);
1265-
if (currEnc == 3)
1266-
tempForMin[prevEnc] = b256Encodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset);
1267-
if (currEnc == 4)
1268-
tempForMin[prevEnc] = X12Encodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset);
1269-
if (currEnc == 5)
1270-
tempForMin[prevEnc] = EdifactEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset, sizeFixed);
1271-
1255+
if (f[prevEnc][i - 1] < 0)
1256+
tempForMin[prevEnc] = -1;
1257+
else {
1258+
if (currEnc == 0)
1259+
tempForMin[prevEnc] = asciiEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], f[prevEnc][i - 1] + dataOffset, dataSize - f[prevEnc][i - 1], i, prevEnc + 1, dataOffset);
1260+
if (currEnc == 1)
1261+
tempForMin[prevEnc] = C40OrTextEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], f[prevEnc][i - 1] + dataOffset, dataSize - f[prevEnc][i - 1], true, i, prevEnc + 1, dataOffset);
1262+
if (currEnc == 2)
1263+
tempForMin[prevEnc] = C40OrTextEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], f[prevEnc][i - 1] + dataOffset, dataSize - f[prevEnc][i - 1], false, i, prevEnc + 1, dataOffset);
1264+
if (currEnc == 3)
1265+
tempForMin[prevEnc] = b256Encodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], f[prevEnc][i - 1] + dataOffset, dataSize - f[prevEnc][i - 1], i, prevEnc + 1, dataOffset);
1266+
if (currEnc == 4)
1267+
tempForMin[prevEnc] = X12Encodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], f[prevEnc][i - 1] + dataOffset, dataSize - f[prevEnc][i - 1], i, prevEnc + 1, dataOffset);
1268+
if (currEnc == 5)
1269+
tempForMin[prevEnc] = EdifactEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], f[prevEnc][i - 1] + dataOffset, dataSize - f[prevEnc][i - 1], i, prevEnc + 1, dataOffset, sizeFixed);
1270+
}
12721271
}
12731272
solveFAndSwitchMode(tempForMin, currEnc, i);
12741273
if (switchMode[currEnc][i] != 0)

barcodes/src/test/java/com/itextpdf/barcodes/BarcodeDataMatrixTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,12 @@ public void barcode06Test() throws IOException, PdfException, InterruptedExcepti
185185

186186
@Test
187187
public void barcode07Test() {
188-
//TODO: update test after DEVSIX-1845
189-
junitExpectedException.expect(ArrayIndexOutOfBoundsException.class);
190188
BarcodeDataMatrix bc = new BarcodeDataMatrix();
191189
bc.setOptions(BarcodeDataMatrix.DM_AUTO);
192190
bc.setWidth(10);
193191
bc.setHeight(10);
194192

195-
String aCode = "aBCdeFG12"; //exception
193+
String aCode = "aBCdeFG12";
196194

197195
int result = bc.setCode(aCode);
198196
Assert.assertEquals(result, BarcodeDataMatrix.DM_ERROR_TEXT_TOO_BIG);

0 commit comments

Comments
 (0)