Coverage Report

Created: 2023-03-26 07:09

/src/libtasn1/lib/gstr.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (C) 2002-2023 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
12.8k
{
34
12.8k
  size_t str_size = strlen (src);
35
12.8k
  size_t dest_size = strlen (dest);
36
37
12.8k
  if (dest_tot_size - dest_size > str_size)
38
12.5k
    {
39
12.5k
      strcat (dest, src);
40
12.5k
    }
41
336
  else
42
336
    {
43
336
      if (dest_tot_size > dest_size)
44
336
  {
45
336
    strncat (dest, src, (dest_tot_size - dest_size) - 1);
46
336
    dest[dest_tot_size - 1] = 0;
47
336
  }
48
336
    }
49
12.8k
}
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
50.7k
{
55
50.7k
  size_t str_size = strlen (src);
56
57
50.7k
  if (dest_tot_size > str_size)
58
50.7k
    {
59
50.7k
      strcpy (dest, src);
60
50.7k
      return str_size;
61
50.7k
    }
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
50.7k
}