Coverage Report

Created: 2025-07-18 07:04

/src/cups/cups/string-private.h
Line
Count
Source (jump to first uncovered line)
1
//
2
// Private string definitions for CUPS.
3
//
4
// Copyright © 2020-2024 by OpenPrinting.
5
// Copyright © 2007-2018 by Apple Inc.
6
// Copyright © 1997-2006 by Easy Software Products.
7
//
8
// Licensed under Apache License v2.0.  See the file "LICENSE" for more
9
// information.
10
//
11
12
#ifndef _CUPS_STRING_PRIVATE_H_
13
#  define _CUPS_STRING_PRIVATE_H_
14
#  include <config.h>
15
#  include <stdio.h>
16
#  include <stdlib.h>
17
#  include <stdarg.h>
18
#  include <string.h>
19
#  include <ctype.h>
20
#  include <errno.h>
21
#  include <locale.h>
22
#  include <time.h>
23
#  include <cups/base.h>
24
#  if defined(_WIN32) && !defined(__CUPS_SSIZE_T_DEFINED)
25
#    define __CUPS_SSIZE_T_DEFINED
26
#    include <stddef.h>
27
// Windows does not support the ssize_t type, so map it to __int64...
28
typedef __int64 ssize_t;      // @private@
29
#  endif // _WIN32 && !__CUPS_SSIZE_T_DEFINED
30
#  ifdef __cplusplus
31
extern "C" {
32
#  endif // __cplusplus
33
34
35
//
36
// Structures...
37
//
38
39
#  define _CUPS_STR_GUARD 0x12344321
40
41
typedef struct _cups_sp_item_s    // String Pool Item
42
{
43
#  ifdef DEBUG_GUARDS
44
  unsigned int  guard;      // Guard word
45
#  endif // DEBUG_GUARDS
46
  unsigned int  ref_count;    // Reference count
47
  char    str[1];     // String
48
} _cups_sp_item_t;
49
50
51
//
52
// Replacements for the ctype macros that are not affected by locale, since we
53
// really only care about testing for ASCII characters when parsing files, etc.
54
//
55
// The _CUPS_INLINE definition controls whether we get an inline function body,
56
// and external function body, or an external definition.
57
//
58
59
#  if defined(__GNUC__) || __STDC_VERSION__ >= 199901L
60
#    define _CUPS_INLINE static inline
61
#  elif defined(_MSC_VER)
62
#    define _CUPS_INLINE static __inline
63
#  elif defined(_CUPS_STRING_C_)
64
#    define _CUPS_INLINE
65
#  endif // __GNUC__ || __STDC_VERSION__
66
67
#  ifdef _CUPS_INLINE
68
_CUPS_INLINE int      // O - 1 on match, 0 otherwise
69
_cups_isalnum(int ch)     // I - Character to test
70
147k
{
71
147k
  return ((ch >= '0' && ch <= '9') ||
72
147k
          (ch >= 'A' && ch <= 'Z') ||
73
147k
          (ch >= 'a' && ch <= 'z'));
74
147k
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isalnum
Unexecuted instantiation: ppd.c:_cups_isalnum
Unexecuted instantiation: ppd-attr.c:_cups_isalnum
Unexecuted instantiation: ppd-cache.c:_cups_isalnum
Unexecuted instantiation: ppd-conflicts.c:_cups_isalnum
Unexecuted instantiation: ppd-custom.c:_cups_isalnum
Unexecuted instantiation: ppd-mark.c:_cups_isalnum
Unexecuted instantiation: ppd-page.c:_cups_isalnum
Unexecuted instantiation: array.c:_cups_isalnum
Unexecuted instantiation: encode.c:_cups_isalnum
Unexecuted instantiation: file.c:_cups_isalnum
Unexecuted instantiation: getputfile.c:_cups_isalnum
Unexecuted instantiation: globals.c:_cups_isalnum
Unexecuted instantiation: hash.c:_cups_isalnum
Unexecuted instantiation: http.c:_cups_isalnum
Unexecuted instantiation: http-addr.c:_cups_isalnum
Unexecuted instantiation: http-addrlist.c:_cups_isalnum
Unexecuted instantiation: http-support.c:_cups_isalnum
Unexecuted instantiation: ipp.c:_cups_isalnum
Unexecuted instantiation: ipp-support.c:_cups_isalnum
language.c:_cups_isalnum
Line
Count
Source
70
147k
{
71
147k
  return ((ch >= '0' && ch <= '9') ||
72
147k
          (ch >= 'A' && ch <= 'Z') ||
73
147k
          (ch >= 'a' && ch <= 'z'));
74
147k
}
Unexecuted instantiation: md5.c:_cups_isalnum
Unexecuted instantiation: options.c:_cups_isalnum
Unexecuted instantiation: pwg-media.c:_cups_isalnum
Unexecuted instantiation: request.c:_cups_isalnum
Unexecuted instantiation: string.c:_cups_isalnum
Unexecuted instantiation: tempfile.c:_cups_isalnum
Unexecuted instantiation: thread.c:_cups_isalnum
Unexecuted instantiation: tls.c:_cups_isalnum
Unexecuted instantiation: transcode.c:_cups_isalnum
Unexecuted instantiation: usersys.c:_cups_isalnum
Unexecuted instantiation: auth.c:_cups_isalnum
Unexecuted instantiation: dir.c:_cups_isalnum
Unexecuted instantiation: dnssd.c:_cups_isalnum
75
76
_CUPS_INLINE int      // O - 1 on match, 0 otherwise
77
_cups_isalpha(int ch)     // I - Character to test
78
29.5k
{
79
29.5k
  return ((ch >= 'A' && ch <= 'Z') ||
80
29.5k
          (ch >= 'a' && ch <= 'z'));
81
29.5k
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isalpha
ppd.c:_cups_isalpha
Line
Count
Source
78
29.5k
{
79
29.5k
  return ((ch >= 'A' && ch <= 'Z') ||
80
29.5k
          (ch >= 'a' && ch <= 'z'));
81
29.5k
}
Unexecuted instantiation: ppd-attr.c:_cups_isalpha
Unexecuted instantiation: ppd-cache.c:_cups_isalpha
Unexecuted instantiation: ppd-conflicts.c:_cups_isalpha
Unexecuted instantiation: ppd-custom.c:_cups_isalpha
Unexecuted instantiation: ppd-mark.c:_cups_isalpha
Unexecuted instantiation: ppd-page.c:_cups_isalpha
Unexecuted instantiation: array.c:_cups_isalpha
Unexecuted instantiation: encode.c:_cups_isalpha
Unexecuted instantiation: file.c:_cups_isalpha
Unexecuted instantiation: getputfile.c:_cups_isalpha
Unexecuted instantiation: globals.c:_cups_isalpha
Unexecuted instantiation: hash.c:_cups_isalpha
Unexecuted instantiation: http.c:_cups_isalpha
Unexecuted instantiation: http-addr.c:_cups_isalpha
Unexecuted instantiation: http-addrlist.c:_cups_isalpha
Unexecuted instantiation: http-support.c:_cups_isalpha
Unexecuted instantiation: ipp.c:_cups_isalpha
Unexecuted instantiation: ipp-support.c:_cups_isalpha
Unexecuted instantiation: language.c:_cups_isalpha
Unexecuted instantiation: md5.c:_cups_isalpha
Unexecuted instantiation: options.c:_cups_isalpha
Unexecuted instantiation: pwg-media.c:_cups_isalpha
Unexecuted instantiation: request.c:_cups_isalpha
Unexecuted instantiation: string.c:_cups_isalpha
Unexecuted instantiation: tempfile.c:_cups_isalpha
Unexecuted instantiation: thread.c:_cups_isalpha
Unexecuted instantiation: tls.c:_cups_isalpha
Unexecuted instantiation: transcode.c:_cups_isalpha
Unexecuted instantiation: usersys.c:_cups_isalpha
Unexecuted instantiation: auth.c:_cups_isalpha
Unexecuted instantiation: dir.c:_cups_isalpha
Unexecuted instantiation: dnssd.c:_cups_isalpha
82
83
_CUPS_INLINE int      // O - 1 on match, 0 otherwise
84
_cups_islower(int ch)     // I - Character to test
85
0
{
86
0
  return (ch >= 'a' && ch <= 'z');
87
0
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_islower
Unexecuted instantiation: ppd.c:_cups_islower
Unexecuted instantiation: ppd-attr.c:_cups_islower
Unexecuted instantiation: ppd-cache.c:_cups_islower
Unexecuted instantiation: ppd-conflicts.c:_cups_islower
Unexecuted instantiation: ppd-custom.c:_cups_islower
Unexecuted instantiation: ppd-mark.c:_cups_islower
Unexecuted instantiation: ppd-page.c:_cups_islower
Unexecuted instantiation: array.c:_cups_islower
Unexecuted instantiation: encode.c:_cups_islower
Unexecuted instantiation: file.c:_cups_islower
Unexecuted instantiation: getputfile.c:_cups_islower
Unexecuted instantiation: globals.c:_cups_islower
Unexecuted instantiation: hash.c:_cups_islower
Unexecuted instantiation: http.c:_cups_islower
Unexecuted instantiation: http-addr.c:_cups_islower
Unexecuted instantiation: http-addrlist.c:_cups_islower
Unexecuted instantiation: http-support.c:_cups_islower
Unexecuted instantiation: ipp.c:_cups_islower
Unexecuted instantiation: ipp-support.c:_cups_islower
Unexecuted instantiation: language.c:_cups_islower
Unexecuted instantiation: md5.c:_cups_islower
Unexecuted instantiation: options.c:_cups_islower
Unexecuted instantiation: pwg-media.c:_cups_islower
Unexecuted instantiation: request.c:_cups_islower
Unexecuted instantiation: string.c:_cups_islower
Unexecuted instantiation: tempfile.c:_cups_islower
Unexecuted instantiation: thread.c:_cups_islower
Unexecuted instantiation: tls.c:_cups_islower
Unexecuted instantiation: transcode.c:_cups_islower
Unexecuted instantiation: usersys.c:_cups_islower
Unexecuted instantiation: auth.c:_cups_islower
Unexecuted instantiation: dir.c:_cups_islower
Unexecuted instantiation: dnssd.c:_cups_islower
88
89
_CUPS_INLINE int      // O - 1 on match, 0 otherwise
90
_cups_isspace(int ch)     // I - Character to test
91
16.7M
{
92
16.7M
  return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' ||
93
16.7M
          ch == '\v');
94
16.7M
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isspace
ppd.c:_cups_isspace
Line
Count
Source
91
15.8M
{
92
15.8M
  return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' ||
93
15.8M
          ch == '\v');
94
15.8M
}
Unexecuted instantiation: ppd-attr.c:_cups_isspace
Unexecuted instantiation: ppd-cache.c:_cups_isspace
ppd-conflicts.c:_cups_isspace
Line
Count
Source
91
657k
{
92
657k
  return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' ||
93
657k
          ch == '\v');
94
657k
}
Unexecuted instantiation: ppd-custom.c:_cups_isspace
Unexecuted instantiation: ppd-mark.c:_cups_isspace
Unexecuted instantiation: ppd-page.c:_cups_isspace
Unexecuted instantiation: array.c:_cups_isspace
Unexecuted instantiation: encode.c:_cups_isspace
Unexecuted instantiation: file.c:_cups_isspace
Unexecuted instantiation: getputfile.c:_cups_isspace
Unexecuted instantiation: globals.c:_cups_isspace
Unexecuted instantiation: hash.c:_cups_isspace
Unexecuted instantiation: http.c:_cups_isspace
Unexecuted instantiation: http-addr.c:_cups_isspace
Unexecuted instantiation: http-addrlist.c:_cups_isspace
Unexecuted instantiation: http-support.c:_cups_isspace
Unexecuted instantiation: ipp.c:_cups_isspace
Unexecuted instantiation: ipp-support.c:_cups_isspace
Unexecuted instantiation: language.c:_cups_isspace
Unexecuted instantiation: md5.c:_cups_isspace
options.c:_cups_isspace
Line
Count
Source
91
130k
{
92
130k
  return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' ||
93
130k
          ch == '\v');
94
130k
}
Unexecuted instantiation: pwg-media.c:_cups_isspace
Unexecuted instantiation: request.c:_cups_isspace
string.c:_cups_isspace
Line
Count
Source
91
53.3k
{
92
53.3k
  return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' ||
93
53.3k
          ch == '\v');
94
53.3k
}
Unexecuted instantiation: tempfile.c:_cups_isspace
Unexecuted instantiation: thread.c:_cups_isspace
Unexecuted instantiation: tls.c:_cups_isspace
Unexecuted instantiation: transcode.c:_cups_isspace
Unexecuted instantiation: usersys.c:_cups_isspace
Unexecuted instantiation: auth.c:_cups_isspace
Unexecuted instantiation: dir.c:_cups_isspace
Unexecuted instantiation: dnssd.c:_cups_isspace
95
96
_CUPS_INLINE int      // O - 1 on match, 0 otherwise
97
_cups_isupper(int ch)     // I - Character to test
98
1.24G
{
99
1.24G
  return (ch >= 'A' && ch <= 'Z');
100
1.24G
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isupper
Unexecuted instantiation: ppd.c:_cups_isupper
Unexecuted instantiation: ppd-attr.c:_cups_isupper
Unexecuted instantiation: ppd-cache.c:_cups_isupper
Unexecuted instantiation: ppd-conflicts.c:_cups_isupper
Unexecuted instantiation: ppd-custom.c:_cups_isupper
Unexecuted instantiation: ppd-mark.c:_cups_isupper
Unexecuted instantiation: ppd-page.c:_cups_isupper
Unexecuted instantiation: array.c:_cups_isupper
Unexecuted instantiation: encode.c:_cups_isupper
Unexecuted instantiation: file.c:_cups_isupper
Unexecuted instantiation: getputfile.c:_cups_isupper
Unexecuted instantiation: globals.c:_cups_isupper
Unexecuted instantiation: hash.c:_cups_isupper
Unexecuted instantiation: http.c:_cups_isupper
Unexecuted instantiation: http-addr.c:_cups_isupper
Unexecuted instantiation: http-addrlist.c:_cups_isupper
Unexecuted instantiation: http-support.c:_cups_isupper
Unexecuted instantiation: ipp.c:_cups_isupper
Unexecuted instantiation: ipp-support.c:_cups_isupper
Unexecuted instantiation: language.c:_cups_isupper
Unexecuted instantiation: md5.c:_cups_isupper
Unexecuted instantiation: options.c:_cups_isupper
Unexecuted instantiation: pwg-media.c:_cups_isupper
Unexecuted instantiation: request.c:_cups_isupper
string.c:_cups_isupper
Line
Count
Source
98
1.24G
{
99
1.24G
  return (ch >= 'A' && ch <= 'Z');
100
1.24G
}
Unexecuted instantiation: tempfile.c:_cups_isupper
Unexecuted instantiation: thread.c:_cups_isupper
Unexecuted instantiation: tls.c:_cups_isupper
Unexecuted instantiation: transcode.c:_cups_isupper
Unexecuted instantiation: usersys.c:_cups_isupper
Unexecuted instantiation: auth.c:_cups_isupper
Unexecuted instantiation: dir.c:_cups_isupper
Unexecuted instantiation: dnssd.c:_cups_isupper
101
102
_CUPS_INLINE int      // O - Converted character
103
_cups_tolower(int ch)     // I - Character to convert
104
1.24G
{
105
1.24G
  return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch);
106
1.24G
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_tolower
Unexecuted instantiation: ppd.c:_cups_tolower
Unexecuted instantiation: ppd-attr.c:_cups_tolower
Unexecuted instantiation: ppd-cache.c:_cups_tolower
Unexecuted instantiation: ppd-conflicts.c:_cups_tolower
Unexecuted instantiation: ppd-custom.c:_cups_tolower
Unexecuted instantiation: ppd-mark.c:_cups_tolower
Unexecuted instantiation: ppd-page.c:_cups_tolower
Unexecuted instantiation: array.c:_cups_tolower
Unexecuted instantiation: encode.c:_cups_tolower
Unexecuted instantiation: file.c:_cups_tolower
Unexecuted instantiation: getputfile.c:_cups_tolower
Unexecuted instantiation: globals.c:_cups_tolower
Unexecuted instantiation: hash.c:_cups_tolower
Unexecuted instantiation: http.c:_cups_tolower
Unexecuted instantiation: http-addr.c:_cups_tolower
Unexecuted instantiation: http-addrlist.c:_cups_tolower
Unexecuted instantiation: http-support.c:_cups_tolower
Unexecuted instantiation: ipp.c:_cups_tolower
Unexecuted instantiation: ipp-support.c:_cups_tolower
Unexecuted instantiation: language.c:_cups_tolower
Unexecuted instantiation: md5.c:_cups_tolower
Unexecuted instantiation: options.c:_cups_tolower
Unexecuted instantiation: pwg-media.c:_cups_tolower
Unexecuted instantiation: request.c:_cups_tolower
string.c:_cups_tolower
Line
Count
Source
104
1.24G
{
105
1.24G
  return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch);
106
1.24G
}
Unexecuted instantiation: tempfile.c:_cups_tolower
Unexecuted instantiation: thread.c:_cups_tolower
Unexecuted instantiation: tls.c:_cups_tolower
Unexecuted instantiation: transcode.c:_cups_tolower
Unexecuted instantiation: usersys.c:_cups_tolower
Unexecuted instantiation: auth.c:_cups_tolower
Unexecuted instantiation: dir.c:_cups_tolower
Unexecuted instantiation: dnssd.c:_cups_tolower
107
108
_CUPS_INLINE int      // O - Converted character
109
_cups_toupper(int ch)     // I - Character to convert
110
0
{
111
0
  return (_cups_islower(ch) ? ch - 'a' + 'A' : ch);
112
0
}
Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_toupper
Unexecuted instantiation: ppd.c:_cups_toupper
Unexecuted instantiation: ppd-attr.c:_cups_toupper
Unexecuted instantiation: ppd-cache.c:_cups_toupper
Unexecuted instantiation: ppd-conflicts.c:_cups_toupper
Unexecuted instantiation: ppd-custom.c:_cups_toupper
Unexecuted instantiation: ppd-mark.c:_cups_toupper
Unexecuted instantiation: ppd-page.c:_cups_toupper
Unexecuted instantiation: array.c:_cups_toupper
Unexecuted instantiation: encode.c:_cups_toupper
Unexecuted instantiation: file.c:_cups_toupper
Unexecuted instantiation: getputfile.c:_cups_toupper
Unexecuted instantiation: globals.c:_cups_toupper
Unexecuted instantiation: hash.c:_cups_toupper
Unexecuted instantiation: http.c:_cups_toupper
Unexecuted instantiation: http-addr.c:_cups_toupper
Unexecuted instantiation: http-addrlist.c:_cups_toupper
Unexecuted instantiation: http-support.c:_cups_toupper
Unexecuted instantiation: ipp.c:_cups_toupper
Unexecuted instantiation: ipp-support.c:_cups_toupper
Unexecuted instantiation: language.c:_cups_toupper
Unexecuted instantiation: md5.c:_cups_toupper
Unexecuted instantiation: options.c:_cups_toupper
Unexecuted instantiation: pwg-media.c:_cups_toupper
Unexecuted instantiation: request.c:_cups_toupper
Unexecuted instantiation: string.c:_cups_toupper
Unexecuted instantiation: tempfile.c:_cups_toupper
Unexecuted instantiation: thread.c:_cups_toupper
Unexecuted instantiation: tls.c:_cups_toupper
Unexecuted instantiation: transcode.c:_cups_toupper
Unexecuted instantiation: usersys.c:_cups_toupper
Unexecuted instantiation: auth.c:_cups_toupper
Unexecuted instantiation: dir.c:_cups_toupper
Unexecuted instantiation: dnssd.c:_cups_toupper
113
#  else
114
extern int _cups_isalnum(int ch);
115
extern int _cups_isalpha(int ch);
116
extern int _cups_islower(int ch);
117
extern int _cups_isspace(int ch);
118
extern int _cups_isupper(int ch);
119
extern int _cups_tolower(int ch);
120
extern int _cups_toupper(int ch);
121
#  endif // _CUPS_INLINE
122
123
124
//
125
// Functions...
126
//
127
128
extern void _cups_strcpy(char *dst, const char *src) _CUPS_PRIVATE;
129
extern int  _cups_strcasecmp(const char *, const char *) _CUPS_PRIVATE;
130
extern int  _cups_strncasecmp(const char *, const char *, size_t n) _CUPS_PRIVATE;
131
132
extern int  _cupsArrayStrcasecmp(const char *s, const char *t, void *data) _CUPS_PRIVATE;
133
extern int  _cupsArrayStrcmp(const char *s1, const char *s2, void *data) _CUPS_PRIVATE;
134
extern char *_cupsArrayStrdup(const char *element, void *data) _CUPS_PRIVATE;
135
extern void _cupsArrayFree(void *element, void *data) _CUPS_PRIVATE;
136
137
extern char *_cupsStrAlloc(const char *s) _CUPS_PRIVATE;
138
extern char *_cupsStrDate(char *buf, size_t bufsize, time_t timeval) _CUPS_PRIVATE;
139
extern void _cupsStrFlush(void) _CUPS_PRIVATE;
140
extern char *_cupsStrFormatd(char *buf, char *bufend, double number, struct lconv *loc) _CUPS_PRIVATE;
141
extern void _cupsStrFree(const char *s) _CUPS_PRIVATE;
142
extern char *_cupsStrRetain(const char *s) _CUPS_PRIVATE;
143
extern double _cupsStrScand(const char *buf, char **bufptr, struct lconv *loc) _CUPS_PRIVATE;
144
extern size_t _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes) _CUPS_PRIVATE;
145
146
147
#  ifdef __cplusplus
148
}
149
#  endif // __cplusplus
150
#endif // !_CUPS_STRING_H_