Coverage Report

Created: 2023-03-26 07:33

/src/gnutls/lib/minitasn1/gstr.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (C) 2002-2022 Free Software Foundation, Inc.
3
 *
4
 * This file is part of LIBTASN1.
5
 *
6
 * The LIBTASN1 library is free software; you can redistribute it
7
 * and/or modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * This library is distributed in the hope that it will be useful, but
12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with this library; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
 * 02110-1301, USA
20
 */
21
22
#include <int.h>
23
#include "gstr.h"
24
25
/* These function are like strcat, strcpy. They only
26
 * do bounds checking (they shouldn't cause buffer overruns),
27
 * and they always produce null terminated strings.
28
 *
29
 * They should be used only with null terminated strings.
30
 */
31
void
32
_asn1_str_cat (char *dest, size_t dest_tot_size, const char *src)
33
532
{
34
532
  size_t str_size = strlen (src);
35
532
  size_t dest_size = strlen (dest);
36
37
532
  if (dest_tot_size - dest_size > str_size)
38
532
    {
39
532
      strcat (dest, src);
40
532
    }
41
0
  else
42
0
    {
43
0
      if (dest_tot_size > dest_size)
44
0
  {
45
0
    strncat (dest, src, (dest_tot_size - dest_size) - 1);
46
0
    dest[dest_tot_size - 1] = 0;
47
0
  }
48
0
    }
49
532
}
50
51
/* Returns the bytes copied (not including the null terminator) */
52
unsigned int
53
_asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src)
54
1.43k
{
55
1.43k
  size_t str_size = strlen (src);
56
57
1.43k
  if (dest_tot_size > str_size)
58
1.43k
    {
59
1.43k
      strcpy (dest, src);
60
1.43k
      return str_size;
61
1.43k
    }
62
0
  else
63
0
    {
64
0
      if (dest_tot_size > 0)
65
0
  {
66
0
    str_size = dest_tot_size - 1;
67
0
    memcpy (dest, src, str_size);
68
0
    dest[str_size] = 0;
69
0
    return str_size;
70
0
  }
71
0
      else
72
0
  return 0;
73
0
    }
74
1.43k
}