Coverage Report

Created: 2026-02-14 06:49

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gnutls/fuzz/handshake.h
Line
Count
Source
1
/*
2
 * Copyright (C) 2017 Nikos Mavrogiannopoulos
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice shall be included in
12
 * all copies or substantial portions of the Software.
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
 * DEALINGS IN THE SOFTWARE.
21
 *
22
 */
23
24
#ifndef HANDSHAKE_H
25
#define HANDSHAKE_H
26
27
20.0k
#define HANDSHAKE_MAX_RETRY_COUNT 10
28
29
typedef struct mem_st {
30
  const uint8_t *data;
31
  size_t size;
32
} mem_st;
33
34
static ssize_t error_push(gnutls_transport_ptr_t tr, const void *data,
35
        size_t len)
36
0
{
37
0
  return -1;
38
0
}
Unexecuted instantiation: gnutls_handshake_server_fuzzer.c:error_push
Unexecuted instantiation: gnutls_handshake_client_fuzzer.c:error_push
39
40
static ssize_t error_pull(gnutls_transport_ptr_t tr, void *data, size_t len)
41
0
{
42
0
  return -1;
43
0
}
Unexecuted instantiation: gnutls_handshake_server_fuzzer.c:error_pull
Unexecuted instantiation: gnutls_handshake_client_fuzzer.c:error_pull
44
45
static int handshake_discard(gnutls_session_t session,
46
           gnutls_record_encryption_level_t level,
47
           gnutls_handshake_description_t htype,
48
           const void *data, size_t data_size)
49
11.7k
{
50
11.7k
  return 0;
51
11.7k
}
gnutls_handshake_server_fuzzer.c:handshake_discard
Line
Count
Source
49
2.56k
{
50
2.56k
  return 0;
51
2.56k
}
gnutls_handshake_client_fuzzer.c:handshake_discard
Line
Count
Source
49
9.19k
{
50
9.19k
  return 0;
51
9.19k
}
52
53
static int handshake_pull(gnutls_session_t session, mem_st *data)
54
21.1k
{
55
21.1k
  uint32_t level, size;
56
21.1k
  int ret;
57
58
21.1k
  if (data->size < 4) {
59
848
    return -1;
60
848
  }
61
62
20.2k
  level = ((unsigned)data->data[0] << 24) | (data->data[1] << 16) |
63
20.2k
    (data->data[2] << 8) | data->data[3];
64
65
20.2k
  data->size -= 4;
66
20.2k
  data->data += 4;
67
68
20.2k
  if (data->size < 4) {
69
40
    return -1;
70
40
  }
71
72
20.2k
  size = ((unsigned)data->data[0] << 24) | (data->data[1] << 16) |
73
20.2k
         (data->data[2] << 8) | data->data[3];
74
75
20.2k
  data->size -= 4;
76
20.2k
  data->data += 4;
77
78
20.2k
  if (size > data->size) {
79
191
    return -1;
80
191
  }
81
82
20.0k
  ret = gnutls_handshake_write(session,
83
20.0k
             (gnutls_record_encryption_level_t)level,
84
20.0k
             data->data, size);
85
20.0k
  data->size -= size;
86
20.0k
  data->data += size;
87
88
20.0k
  return ret;
89
20.2k
}
gnutls_handshake_server_fuzzer.c:handshake_pull
Line
Count
Source
54
3.81k
{
55
3.81k
  uint32_t level, size;
56
3.81k
  int ret;
57
58
3.81k
  if (data->size < 4) {
59
568
    return -1;
60
568
  }
61
62
3.25k
  level = ((unsigned)data->data[0] << 24) | (data->data[1] << 16) |
63
3.25k
    (data->data[2] << 8) | data->data[3];
64
65
3.25k
  data->size -= 4;
66
3.25k
  data->data += 4;
67
68
3.25k
  if (data->size < 4) {
69
22
    return -1;
70
22
  }
71
72
3.22k
  size = ((unsigned)data->data[0] << 24) | (data->data[1] << 16) |
73
3.22k
         (data->data[2] << 8) | data->data[3];
74
75
3.22k
  data->size -= 4;
76
3.22k
  data->data += 4;
77
78
3.22k
  if (size > data->size) {
79
107
    return -1;
80
107
  }
81
82
3.12k
  ret = gnutls_handshake_write(session,
83
3.12k
             (gnutls_record_encryption_level_t)level,
84
3.12k
             data->data, size);
85
3.12k
  data->size -= size;
86
3.12k
  data->data += size;
87
88
3.12k
  return ret;
89
3.22k
}
gnutls_handshake_client_fuzzer.c:handshake_pull
Line
Count
Source
54
17.3k
{
55
17.3k
  uint32_t level, size;
56
17.3k
  int ret;
57
58
17.3k
  if (data->size < 4) {
59
280
    return -1;
60
280
  }
61
62
17.0k
  level = ((unsigned)data->data[0] << 24) | (data->data[1] << 16) |
63
17.0k
    (data->data[2] << 8) | data->data[3];
64
65
17.0k
  data->size -= 4;
66
17.0k
  data->data += 4;
67
68
17.0k
  if (data->size < 4) {
69
18
    return -1;
70
18
  }
71
72
17.0k
  size = ((unsigned)data->data[0] << 24) | (data->data[1] << 16) |
73
17.0k
         (data->data[2] << 8) | data->data[3];
74
75
17.0k
  data->size -= 4;
76
17.0k
  data->data += 4;
77
78
17.0k
  if (size > data->size) {
79
84
    return -1;
80
84
  }
81
82
16.9k
  ret = gnutls_handshake_write(session,
83
16.9k
             (gnutls_record_encryption_level_t)level,
84
16.9k
             data->data, size);
85
16.9k
  data->size -= size;
86
16.9k
  data->data += size;
87
88
16.9k
  return ret;
89
17.0k
}
90
91
#endif