Coverage Report

Created: 2026-07-10 11:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/workdir/UnpackedTarball/libjpeg-turbo/src/jstdhuff.c
Line
Count
Source
1
/*
2
 * jstdhuff.c
3
 *
4
 * This file was part of the Independent JPEG Group's software:
5
 * Copyright (C) 1991-1998, Thomas G. Lane.
6
 * libjpeg-turbo Modifications:
7
 * Copyright (C) 2013, 2022, 2024, D. R. Commander.
8
 * For conditions of distribution and use, see the accompanying README.ijg
9
 * file.
10
 *
11
 * This file contains routines to set the default Huffman tables, if they are
12
 * not already set.
13
 */
14
15
/*
16
 * Huffman table setup routines
17
 */
18
19
LOCAL(void)
20
add_huff_table(j_common_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits,
21
               const UINT8 *val)
22
/* Define a Huffman table */
23
87.2k
{
24
87.2k
  int nsymbols, len;
25
26
87.2k
  if (*htblptr == NULL)
27
8.63k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
78.6k
  else if (cinfo->is_decompressor)
29
78.6k
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
8.63k
  memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits));
33
34
  /* Validate the counts.  We do this here mainly so we can copy the right
35
   * number of symbols from the val[] array, without risking marching off
36
   * the end of memory.  jchuff.c will do a more thorough test later.
37
   */
38
8.63k
  nsymbols = 0;
39
146k
  for (len = 1; len <= 16; len++)
40
138k
    nsymbols += bits[len];
41
8.63k
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
8.63k
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
8.63k
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
8.63k
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
8.63k
  (*htblptr)->sent_table = FALSE;
50
8.63k
}
Unexecuted instantiation: jcparam.c:add_huff_table
jdhuff.c:add_huff_table
Line
Count
Source
23
87.2k
{
24
87.2k
  int nsymbols, len;
25
26
87.2k
  if (*htblptr == NULL)
27
8.63k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
78.6k
  else if (cinfo->is_decompressor)
29
78.6k
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
8.63k
  memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits));
33
34
  /* Validate the counts.  We do this here mainly so we can copy the right
35
   * number of symbols from the val[] array, without risking marching off
36
   * the end of memory.  jchuff.c will do a more thorough test later.
37
   */
38
8.63k
  nsymbols = 0;
39
146k
  for (len = 1; len <= 16; len++)
40
138k
    nsymbols += bits[len];
41
8.63k
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
8.63k
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
8.63k
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
8.63k
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
8.63k
  (*htblptr)->sent_table = FALSE;
50
8.63k
}
51
52
53
LOCAL(void)
54
std_huff_tables(j_common_ptr cinfo)
55
/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
56
/* IMPORTANT: these are only valid for 8-bit data precision! */
57
21.8k
{
58
21.8k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
21.8k
  static const UINT8 bits_dc_luminance[17] = {
61
21.8k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
21.8k
  };
63
21.8k
  static const UINT8 val_dc_luminance[] = {
64
21.8k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
21.8k
  };
66
67
21.8k
  static const UINT8 bits_dc_chrominance[17] = {
68
21.8k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
21.8k
  };
70
21.8k
  static const UINT8 val_dc_chrominance[] = {
71
21.8k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
21.8k
  };
73
74
21.8k
  static const UINT8 bits_ac_luminance[17] = {
75
21.8k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
21.8k
  };
77
21.8k
  static const UINT8 val_ac_luminance[] = {
78
21.8k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
21.8k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
21.8k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
21.8k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
21.8k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
21.8k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
21.8k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
21.8k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
21.8k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
21.8k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
21.8k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
21.8k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
21.8k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
21.8k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
21.8k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
21.8k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
21.8k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
21.8k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
21.8k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
21.8k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
21.8k
    0xf9, 0xfa
99
21.8k
  };
100
101
21.8k
  static const UINT8 bits_ac_chrominance[17] = {
102
21.8k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
21.8k
  };
104
21.8k
  static const UINT8 val_ac_chrominance[] = {
105
21.8k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
21.8k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
21.8k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
21.8k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
21.8k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
21.8k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
21.8k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
21.8k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
21.8k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
21.8k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
21.8k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
21.8k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
21.8k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
21.8k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
21.8k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
21.8k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
21.8k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
21.8k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
21.8k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
21.8k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
21.8k
    0xf9, 0xfa
126
21.8k
  };
127
128
21.8k
  if (cinfo->is_decompressor) {
129
21.8k
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
21.8k
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
21.8k
  } else {
132
0
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
0
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
0
  }
135
136
21.8k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
21.8k
                 val_dc_luminance);
138
21.8k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
21.8k
                 val_ac_luminance);
140
21.8k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
21.8k
                 val_dc_chrominance);
142
21.8k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
21.8k
                 val_ac_chrominance);
144
21.8k
}
Unexecuted instantiation: jcparam.c:std_huff_tables
jdhuff.c:std_huff_tables
Line
Count
Source
57
21.8k
{
58
21.8k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
21.8k
  static const UINT8 bits_dc_luminance[17] = {
61
21.8k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
21.8k
  };
63
21.8k
  static const UINT8 val_dc_luminance[] = {
64
21.8k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
21.8k
  };
66
67
21.8k
  static const UINT8 bits_dc_chrominance[17] = {
68
21.8k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
21.8k
  };
70
21.8k
  static const UINT8 val_dc_chrominance[] = {
71
21.8k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
21.8k
  };
73
74
21.8k
  static const UINT8 bits_ac_luminance[17] = {
75
21.8k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
21.8k
  };
77
21.8k
  static const UINT8 val_ac_luminance[] = {
78
21.8k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
21.8k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
21.8k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
21.8k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
21.8k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
21.8k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
21.8k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
21.8k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
21.8k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
21.8k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
21.8k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
21.8k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
21.8k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
21.8k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
21.8k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
21.8k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
21.8k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
21.8k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
21.8k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
21.8k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
21.8k
    0xf9, 0xfa
99
21.8k
  };
100
101
21.8k
  static const UINT8 bits_ac_chrominance[17] = {
102
21.8k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
21.8k
  };
104
21.8k
  static const UINT8 val_ac_chrominance[] = {
105
21.8k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
21.8k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
21.8k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
21.8k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
21.8k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
21.8k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
21.8k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
21.8k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
21.8k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
21.8k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
21.8k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
21.8k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
21.8k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
21.8k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
21.8k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
21.8k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
21.8k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
21.8k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
21.8k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
21.8k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
21.8k
    0xf9, 0xfa
126
21.8k
  };
127
128
21.8k
  if (cinfo->is_decompressor) {
129
21.8k
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
21.8k
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
21.8k
  } else {
132
0
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
0
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
0
  }
135
136
21.8k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
21.8k
                 val_dc_luminance);
138
21.8k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
21.8k
                 val_ac_luminance);
140
21.8k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
21.8k
                 val_dc_chrominance);
142
21.8k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
21.8k
                 val_ac_chrominance);
144
21.8k
}