Coverage Report

Created: 2026-10-28 06:08

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/bmcweb/subprojects/nghttp2/lib/nghttp2_hd_huffman.h
Line
Count
Source
1
/*
2
 * nghttp2 - HTTP/2 C Library
3
 *
4
 * Copyright (c) 2013 Tatsuhiro Tsujikawa
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining
7
 * a copy of this software and associated documentation files (the
8
 * "Software"), to deal in the Software without restriction, including
9
 * without limitation the rights to use, copy, modify, merge, publish,
10
 * distribute, sublicense, and/or sell copies of the Software, and to
11
 * permit persons to whom the Software is furnished to do so, subject to
12
 * the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be
15
 * included in all copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
 */
25
#ifndef NGHTTP2_HD_HUFFMAN_H
26
#define NGHTTP2_HD_HUFFMAN_H
27
28
#ifdef HAVE_CONFIG_H
29
#  include <config.h>
30
#endif /* defined(HAVE_CONFIG_H) */
31
32
#include <nghttp2/nghttp2.h>
33
34
typedef enum {
35
  /* FSA accepts this state as the end of huffman encoding
36
     sequence. */
37
  NGHTTP2_HUFF_ACCEPTED = 1,
38
  /* This state emits symbol */
39
  NGHTTP2_HUFF_SYM = 1 << 1,
40
} nghttp2_huff_decode_flag;
41
42
typedef struct {
43
  /* fstate is the current huffman decoding state, which is actually
44
     the node ID of internal huffman tree with
45
     nghttp2_huff_decode_flag OR-ed.  We have 257 leaf nodes, but they
46
     are identical to root node other than emitting a symbol, so we
47
     have 256 internal nodes [1..255], inclusive.  The node ID 256 is
48
     a special node and it is a terminal state that means decoding
49
     failed. */
50
  uint16_t fstate;
51
  uint8_t flags;
52
  /* symbol if NGHTTP2_HUFF_SYM flag set */
53
  uint8_t sym;
54
} nghttp2_huff_decode;
55
56
typedef nghttp2_huff_decode huff_decode_table_type[16];
57
58
typedef struct {
59
  /* fstate is the current huffman decoding state. */
60
  uint16_t fstate;
61
  uint8_t flags;
62
} nghttp2_hd_huff_decode_context;
63
64
typedef struct {
65
  /* The number of bits in this code */
66
  uint32_t nbits;
67
  /* Huffman code aligned to LSB */
68
  uint32_t code;
69
} nghttp2_huff_sym;
70
71
extern const nghttp2_huff_sym huff_sym_table[];
72
extern const nghttp2_huff_decode huff_decode_table[][16];
73
74
/*
75
 * nghttp2_huff_estimate_decode_length returns the estimated decoded
76
 * length of the huffman encoded string of length |len|.
77
 */
78
0
static inline size_t nghttp2_huff_estimate_decode_length(size_t len) {
79
0
  return len * 8 / 5;
80
0
}
Unexecuted instantiation: nghttp2_session.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_submit.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_hd.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_hd_huffman.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_hd_huffman_data.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_http.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_extpri.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_frame.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_stream.c:nghttp2_huff_estimate_decode_length
Unexecuted instantiation: nghttp2_outbound_item.c:nghttp2_huff_estimate_decode_length
81
82
#endif /* !defined(NGHTTP2_HD_HUFFMAN_H) */