ref: ad707fba426702631466973e6e80c48d16398b88
parent: 606ce11fc930769a5bdf920a5902c158be8b3d5f
author: masaki <masaki@a1074d23-0009-0410-80fe-cf8c14f379e6>
date: Tue Jun 22 02:12:54 EDT 2010
Fix for bug 689836 and 691248. Bug 689836 - Huffman tables with only positive values are decoded incorrectly Bug 691248 - jbig2dec doesn't handle 042_11 (Huffman Symbol Region) This patch fixes mulfunctions seen on standard huffman table K, L, M and N. A difference will be seen on tests_private/comparefiles/Bug690360.pdf. This file was affected by table K mulfunction and this is a improvement. git-svn-id: http://svn.ghostscript.com/ghostscript/trunk/gs/jbig2dec/@11415 a1074d23-0009-0410-80fe-cf8c14f379e6 (cherry picked from commit d59bf48fcaefb0cb531d90cb748c173198a10f54) Signed-off-by: Masaki Ushizaka <masaki@ghostscript.com>
--- a/jbig2_hufftab.h
+++ b/jbig2_hufftab.h
@@ -21,6 +21,7 @@
/* types are in jbig2_huffman.h, you must include that first */
+#define JBIG2_COUNTOF(x) (sizeof((x)) / sizeof((x)[0]))
/* Table B.1 */
const Jbig2HuffmanLine
@@ -33,7 +34,7 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_A = { FALSE, 5, jbig2_huffman_lines_A };
+jbig2_huffman_params_A = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_A), jbig2_huffman_lines_A };
/* Table B.2 */
const Jbig2HuffmanLine
@@ -45,11 +46,11 @@
{ 5, 6, 11 },
{ 0, 32, -1 }, /* low */
{ 6, 32, 75 }, /* high */
- { 6, 0, 0 }
+ { 6, 0, 0 } /* OOB */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_B = { TRUE, 8, jbig2_huffman_lines_B };
+jbig2_huffman_params_B = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_B), jbig2_huffman_lines_B };
/* Table B.3 */
const Jbig2HuffmanLine
@@ -62,11 +63,11 @@
{ 5, 6, 11 },
{ 8, 32, -257 }, /* low */
{ 7, 32, 75 }, /* high */
- { 6, 0, 0 } /* OOB */
+ { 6, 0, 0 } /* OOB */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_C = { TRUE, 9, jbig2_huffman_lines_C };
+jbig2_huffman_params_C = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_C), jbig2_huffman_lines_C };
/* Table B.4 */
const Jbig2HuffmanLine
@@ -81,7 +82,7 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_D = { FALSE, 7, jbig2_huffman_lines_D };
+jbig2_huffman_params_D = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_D), jbig2_huffman_lines_D };
/* Table B.5 */
const Jbig2HuffmanLine
@@ -97,7 +98,7 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_E = { FALSE, 8, jbig2_huffman_lines_E };
+jbig2_huffman_params_E = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_E), jbig2_huffman_lines_E };
/* Table B.6 */
const Jbig2HuffmanLine
@@ -119,7 +120,7 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_F = { FALSE, 14, jbig2_huffman_lines_F };
+jbig2_huffman_params_F = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_F), jbig2_huffman_lines_F };
/* Table B.7 */
const Jbig2HuffmanLine
@@ -138,11 +139,11 @@
{3, 9, 512},
{3, 10, 1024},
{5, 32, -1025}, /* low */
- {5, 32, 2048} /* high */
+ {5, 32, 2048} /* high */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_G = { FALSE, 15, jbig2_huffman_lines_G };
+jbig2_huffman_params_G = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_G), jbig2_huffman_lines_G };
/* Table B.8 */
const Jbig2HuffmanLine
@@ -165,13 +166,13 @@
{6, 7, 262},
{7, 8, 390},
{6, 10, 646},
- {9, 32, -16}, /* low */
+ {9, 32, -16}, /* low */
{9, 32, 1670}, /* high */
- {2, 0, 0} /* OOB */
+ {2, 0, 0} /* OOB */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_H = { TRUE, 21, jbig2_huffman_lines_H };
+jbig2_huffman_params_H = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_H), jbig2_huffman_lines_H };
/* Table B.9 */
const Jbig2HuffmanLine
@@ -201,7 +202,7 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_I = { TRUE, 22, jbig2_huffman_lines_I };
+jbig2_huffman_params_I = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_I), jbig2_huffman_lines_I };
/* Table B.10 */
const Jbig2HuffmanLine
@@ -230,7 +231,7 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_J = { TRUE, 21, jbig2_huffman_lines_J };
+jbig2_huffman_params_J = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_J), jbig2_huffman_lines_J };
/* Table B.11 */
const Jbig2HuffmanLine
@@ -237,7 +238,7 @@
jbig2_huffman_lines_K[] = {
{1, 0, 1},
{2, 1, 2},
- {4, 0, 3},
+ {4, 0, 4},
{4, 1, 5},
{5, 1, 7},
{5, 2, 9},
@@ -247,11 +248,12 @@
{7, 4, 29},
{7, 5, 45},
{7, 6, 77},
+ {0, 32, -1}, /* low */
{7, 32, 141} /* high */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_K = { FALSE, 13, jbig2_huffman_lines_K };
+jbig2_huffman_params_K = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_K), jbig2_huffman_lines_K };
/* Table B.12 */
const Jbig2HuffmanLine
@@ -268,11 +270,13 @@
{7, 3, 17},
{7, 4, 25},
{8, 5, 41},
- {8, 32, 73}
+ {8, 32, 73},
+ {0, 32, -1}, /* low */
+ {0, 32, 0} /* high */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_L = { FALSE, 13, jbig2_huffman_lines_L };
+jbig2_huffman_params_L = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_L), jbig2_huffman_lines_L };
/* Table B.13 */
@@ -290,11 +294,12 @@
{6, 4, 29},
{6, 5, 45},
{7, 6, 77},
+ {0, 32, -1}, /* low */
{7, 32, 141} /* high */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_M = { FALSE, 13, jbig2_huffman_lines_M };
+jbig2_huffman_params_M = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_M), jbig2_huffman_lines_M };
/* Table B.14 */
const Jbig2HuffmanLine
@@ -302,14 +307,14 @@
{ 3, 0, -2 },
{ 3, 0, -1 },
{ 1, 0, 0 },
- { 3, 3, 1 },
- { 3, 6, 2 },
+ { 3, 0, 1 },
+ { 3, 0, 2 },
{ 0, 32, -1 }, /* low */
- { 0, 32, 3 }, /* high */
+ { 0, 32, 3 }, /* high */
};
const Jbig2HuffmanParams
-jbig2_huffman_params_N = { FALSE, 7, jbig2_huffman_lines_N };
+jbig2_huffman_params_N = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_N), jbig2_huffman_lines_N };
/* Table B.15 */
const Jbig2HuffmanLine
@@ -330,6 +335,8 @@
};
const Jbig2HuffmanParams
-jbig2_huffman_params_O = { FALSE, 13, jbig2_huffman_lines_O };
+jbig2_huffman_params_O = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_O), jbig2_huffman_lines_O };
+
+#undef JBIG2_COUNTOF
#endif /* JBIG2_HUFFTAB_H */