Coverage Report

Created: 2025-06-13 06:06

/src/postgres/src/include/mb/pg_wchar.h
Line
Count
Source (jump to first uncovered line)
1
/*-------------------------------------------------------------------------
2
 *
3
 * pg_wchar.h
4
 *    multibyte-character support
5
 *
6
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7
 * Portions Copyright (c) 1994, Regents of the University of California
8
 *
9
 * src/include/mb/pg_wchar.h
10
 *
11
 *  NOTES
12
 *    This is used both by the backend and by frontends, but should not be
13
 *    included by libpq client programs.  In particular, a libpq client
14
 *    should not assume that the encoding IDs used by the version of libpq
15
 *    it's linked to match up with the IDs declared here.
16
 *    To help prevent mistakes, relevant functions that are exported by
17
 *    libpq have a physically different name when being referenced
18
 *    statically.
19
 *
20
 *-------------------------------------------------------------------------
21
 */
22
#ifndef PG_WCHAR_H
23
#define PG_WCHAR_H
24
25
/*
26
 * The pg_wchar type
27
 */
28
typedef unsigned int pg_wchar;
29
30
/*
31
 * Maximum byte length of multibyte characters in any backend encoding
32
 */
33
0
#define MAX_MULTIBYTE_CHAR_LEN  4
34
35
/*
36
 * various definitions for EUC
37
 */
38
0
#define SS2 0x8e        /* single shift 2 (JIS0201) */
39
0
#define SS3 0x8f        /* single shift 3 (JIS0212) */
40
41
/*
42
 * SJIS validation macros
43
 */
44
0
#define ISSJISHEAD(c) (((c) >= 0x81 && (c) <= 0x9f) || ((c) >= 0xe0 && (c) <= 0xfc))
45
0
#define ISSJISTAIL(c) (((c) >= 0x40 && (c) <= 0x7e) || ((c) >= 0x80 && (c) <= 0xfc))
46
47
/*----------------------------------------------------
48
 * MULE Internal Encoding (MIC)
49
 *
50
 * This encoding follows the design used within XEmacs; it is meant to
51
 * subsume many externally-defined character sets.  Each character includes
52
 * identification of the character set it belongs to, so the encoding is
53
 * general but somewhat bulky.
54
 *
55
 * Currently PostgreSQL supports 5 types of MULE character sets:
56
 *
57
 * 1) 1-byte ASCII characters.  Each byte is below 0x80.
58
 *
59
 * 2) "Official" single byte charsets such as ISO-8859-1 (Latin1).
60
 *    Each MULE character consists of 2 bytes: LC1 + C1, where LC1 is
61
 *    an identifier for the charset (in the range 0x81 to 0x8d) and C1
62
 *    is the character code (in the range 0xa0 to 0xff).
63
 *
64
 * 3) "Private" single byte charsets such as SISHENG.  Each MULE
65
 *    character consists of 3 bytes: LCPRV1 + LC12 + C1, where LCPRV1
66
 *    is a private-charset flag, LC12 is an identifier for the charset,
67
 *    and C1 is the character code (in the range 0xa0 to 0xff).
68
 *    LCPRV1 is either 0x9a (if LC12 is in the range 0xa0 to 0xdf)
69
 *    or 0x9b (if LC12 is in the range 0xe0 to 0xef).
70
 *
71
 * 4) "Official" multibyte charsets such as JIS X0208.  Each MULE
72
 *    character consists of 3 bytes: LC2 + C1 + C2, where LC2 is
73
 *    an identifier for the charset (in the range 0x90 to 0x99) and C1
74
 *    and C2 form the character code (each in the range 0xa0 to 0xff).
75
 *
76
 * 5) "Private" multibyte charsets such as CNS 11643-1992 Plane 3.
77
 *    Each MULE character consists of 4 bytes: LCPRV2 + LC22 + C1 + C2,
78
 *    where LCPRV2 is a private-charset flag, LC22 is an identifier for
79
 *    the charset, and C1 and C2 form the character code (each in the range
80
 *    0xa0 to 0xff).  LCPRV2 is either 0x9c (if LC22 is in the range 0xf0
81
 *    to 0xf4) or 0x9d (if LC22 is in the range 0xf5 to 0xfe).
82
 *
83
 * "Official" encodings are those that have been assigned code numbers by
84
 * the XEmacs project; "private" encodings have Postgres-specific charset
85
 * identifiers.
86
 *
87
 * See the "XEmacs Internals Manual", available at http://www.xemacs.org,
88
 * for more details.  Note that for historical reasons, Postgres'
89
 * private-charset flag values do not match what XEmacs says they should be,
90
 * so this isn't really exactly MULE (not that private charsets would be
91
 * interoperable anyway).
92
 *
93
 * Note that XEmacs's implementation is different from what emacs does.
94
 * We follow emacs's implementation, rather than XEmacs's.
95
 *----------------------------------------------------
96
 */
97
98
/*
99
 * Charset identifiers (also called "leading bytes" in the MULE documentation)
100
 */
101
102
/*
103
 * Charset IDs for official single byte encodings (0x81-0x8e)
104
 */
105
#define LC_ISO8859_1    0x81  /* ISO8859 Latin 1 */
106
#define LC_ISO8859_2    0x82  /* ISO8859 Latin 2 */
107
#define LC_ISO8859_3    0x83  /* ISO8859 Latin 3 */
108
#define LC_ISO8859_4    0x84  /* ISO8859 Latin 4 */
109
#define LC_TIS620     0x85  /* Thai (not supported yet) */
110
#define LC_ISO8859_7    0x86  /* Greek (not supported yet) */
111
#define LC_ISO8859_6    0x87  /* Arabic (not supported yet) */
112
#define LC_ISO8859_8    0x88  /* Hebrew (not supported yet) */
113
#define LC_JISX0201K    0x89  /* Japanese 1 byte kana */
114
#define LC_JISX0201R    0x8a  /* Japanese 1 byte Roman */
115
/* Note that 0x8b seems to be unused as of Emacs 20.7.
116
 * However, there might be a chance that 0x8b could be used
117
 * in later versions of Emacs.
118
 */
119
#define LC_KOI8_R     0x8b  /* Cyrillic KOI8-R */
120
#define LC_ISO8859_5    0x8c  /* ISO8859 Cyrillic */
121
#define LC_ISO8859_9    0x8d  /* ISO8859 Latin 5 (not supported yet) */
122
#define LC_ISO8859_15   0x8e  /* ISO8859 Latin 15 (not supported yet) */
123
/* #define CONTROL_1    0x8f  control characters (unused) */
124
125
/* Is a leading byte for "official" single byte encodings? */
126
0
#define IS_LC1(c) ((unsigned char)(c) >= 0x81 && (unsigned char)(c) <= 0x8d)
127
128
/*
129
 * Charset IDs for official multibyte encodings (0x90-0x99)
130
 * 0x9a-0x9d are free. 0x9e and 0x9f are reserved.
131
 */
132
#define LC_JISX0208_1978  0x90  /* Japanese Kanji, old JIS (not supported) */
133
#define LC_GB2312_80    0x91  /* Chinese */
134
#define LC_JISX0208     0x92  /* Japanese Kanji (JIS X 0208) */
135
#define LC_KS5601     0x93  /* Korean */
136
#define LC_JISX0212     0x94  /* Japanese Kanji (JIS X 0212) */
137
#define LC_CNS11643_1   0x95  /* CNS 11643-1992 Plane 1 */
138
#define LC_CNS11643_2   0x96  /* CNS 11643-1992 Plane 2 */
139
#define LC_JISX0213_1   0x97  /* Japanese Kanji (JIS X 0213 Plane 1)
140
                   * (not supported) */
141
#define LC_BIG5_1     0x98  /* Plane 1 Chinese traditional (not
142
                   * supported) */
143
#define LC_BIG5_2     0x99  /* Plane 1 Chinese traditional (not
144
                   * supported) */
145
146
/* Is a leading byte for "official" multibyte encodings? */
147
0
#define IS_LC2(c) ((unsigned char)(c) >= 0x90 && (unsigned char)(c) <= 0x99)
148
149
/*
150
 * Postgres-specific prefix bytes for "private" single byte encodings
151
 * (According to the MULE docs, we should be using 0x9e for this)
152
 */
153
0
#define LCPRV1_A    0x9a
154
0
#define LCPRV1_B    0x9b
155
0
#define IS_LCPRV1(c)  ((unsigned char)(c) == LCPRV1_A || (unsigned char)(c) == LCPRV1_B)
156
#define IS_LCPRV1_A_RANGE(c)  \
157
0
  ((unsigned char)(c) >= 0xa0 && (unsigned char)(c) <= 0xdf)
158
#define IS_LCPRV1_B_RANGE(c)  \
159
0
  ((unsigned char)(c) >= 0xe0 && (unsigned char)(c) <= 0xef)
160
161
/*
162
 * Postgres-specific prefix bytes for "private" multibyte encodings
163
 * (According to the MULE docs, we should be using 0x9f for this)
164
 */
165
0
#define LCPRV2_A    0x9c
166
0
#define LCPRV2_B    0x9d
167
0
#define IS_LCPRV2(c)  ((unsigned char)(c) == LCPRV2_A || (unsigned char)(c) == LCPRV2_B)
168
#define IS_LCPRV2_A_RANGE(c)  \
169
0
  ((unsigned char)(c) >= 0xf0 && (unsigned char)(c) <= 0xf4)
170
#define IS_LCPRV2_B_RANGE(c)  \
171
0
  ((unsigned char)(c) >= 0xf5 && (unsigned char)(c) <= 0xfe)
172
173
/*
174
 * Charset IDs for private single byte encodings (0xa0-0xef)
175
 */
176
#define LC_SISHENG      0xa0  /* Chinese SiSheng characters for
177
                   * PinYin/ZhuYin (not supported) */
178
#define LC_IPA        0xa1  /* IPA (International Phonetic
179
                   * Association) (not supported) */
180
#define LC_VISCII_LOWER   0xa2  /* Vietnamese VISCII1.1 lower-case (not
181
                   * supported) */
182
#define LC_VISCII_UPPER   0xa3  /* Vietnamese VISCII1.1 upper-case (not
183
                   * supported) */
184
#define LC_ARABIC_DIGIT   0xa4  /* Arabic digit (not supported) */
185
#define LC_ARABIC_1_COLUMN  0xa5  /* Arabic 1-column (not supported) */
186
#define LC_ASCII_RIGHT_TO_LEFT  0xa6  /* ASCII (left half of ISO8859-1) with
187
                     * right-to-left direction (not
188
                     * supported) */
189
#define LC_LAO        0xa7  /* Lao characters (ISO10646 0E80..0EDF)
190
                   * (not supported) */
191
#define LC_ARABIC_2_COLUMN  0xa8  /* Arabic 1-column (not supported) */
192
193
/*
194
 * Charset IDs for private multibyte encodings (0xf0-0xff)
195
 */
196
#define LC_INDIAN_1_COLUMN  0xf0  /* Indian charset for 1-column width
197
                   * glyphs (not supported) */
198
#define LC_TIBETAN_1_COLUMN 0xf1  /* Tibetan 1-column width glyphs (not
199
                   * supported) */
200
#define LC_UNICODE_SUBSET_2 0xf2  /* Unicode characters of the range
201
                   * U+2500..U+33FF. (not supported) */
202
#define LC_UNICODE_SUBSET_3 0xf3  /* Unicode characters of the range
203
                   * U+E000..U+FFFF. (not supported) */
204
#define LC_UNICODE_SUBSET 0xf4  /* Unicode characters of the range
205
                   * U+0100..U+24FF. (not supported) */
206
#define LC_ETHIOPIC     0xf5  /* Ethiopic characters (not supported) */
207
#define LC_CNS11643_3   0xf6  /* CNS 11643-1992 Plane 3 */
208
#define LC_CNS11643_4   0xf7  /* CNS 11643-1992 Plane 4 */
209
#define LC_CNS11643_5   0xf8  /* CNS 11643-1992 Plane 5 */
210
#define LC_CNS11643_6   0xf9  /* CNS 11643-1992 Plane 6 */
211
#define LC_CNS11643_7   0xfa  /* CNS 11643-1992 Plane 7 */
212
#define LC_INDIAN_2_COLUMN  0xfb  /* Indian charset for 2-column width
213
                   * glyphs (not supported) */
214
#define LC_TIBETAN      0xfc  /* Tibetan (not supported) */
215
/* #define FREE       0xfd  free (unused) */
216
/* #define FREE       0xfe  free (unused) */
217
/* #define FREE       0xff  free (unused) */
218
219
/*----------------------------------------------------
220
 * end of MULE stuff
221
 *----------------------------------------------------
222
 */
223
224
/*
225
 * PostgreSQL encoding identifiers
226
 *
227
 * WARNING: If you add some encoding don't forget to update
228
 *      the pg_enc2name_tbl[] array (in src/common/encnames.c),
229
 *      the pg_enc2gettext_tbl[] array (in src/common/encnames.c) and
230
 *      the pg_wchar_table[] array (in src/common/wchar.c) and to check
231
 *      PG_ENCODING_BE_LAST macro.
232
 *
233
 * PG_SQL_ASCII is default encoding and must be = 0.
234
 *
235
 * XXX  We must avoid renumbering any backend encoding until libpq's major
236
 * version number is increased beyond 5; it turns out that the backend
237
 * encoding IDs are effectively part of libpq's ABI as far as 8.2 initdb and
238
 * psql are concerned.
239
 */
240
typedef enum pg_enc
241
{
242
  PG_SQL_ASCII = 0,     /* SQL/ASCII */
243
  PG_EUC_JP,          /* EUC for Japanese */
244
  PG_EUC_CN,          /* EUC for Chinese */
245
  PG_EUC_KR,          /* EUC for Korean */
246
  PG_EUC_TW,          /* EUC for Taiwan */
247
  PG_EUC_JIS_2004,      /* EUC-JIS-2004 */
248
  PG_UTF8,          /* Unicode UTF8 */
249
  PG_MULE_INTERNAL,     /* Mule internal code */
250
  PG_LATIN1,          /* ISO-8859-1 Latin 1 */
251
  PG_LATIN2,          /* ISO-8859-2 Latin 2 */
252
  PG_LATIN3,          /* ISO-8859-3 Latin 3 */
253
  PG_LATIN4,          /* ISO-8859-4 Latin 4 */
254
  PG_LATIN5,          /* ISO-8859-9 Latin 5 */
255
  PG_LATIN6,          /* ISO-8859-10 Latin6 */
256
  PG_LATIN7,          /* ISO-8859-13 Latin7 */
257
  PG_LATIN8,          /* ISO-8859-14 Latin8 */
258
  PG_LATIN9,          /* ISO-8859-15 Latin9 */
259
  PG_LATIN10,         /* ISO-8859-16 Latin10 */
260
  PG_WIN1256,         /* windows-1256 */
261
  PG_WIN1258,         /* Windows-1258 */
262
  PG_WIN866,          /* (MS-DOS CP866) */
263
  PG_WIN874,          /* windows-874 */
264
  PG_KOI8R,         /* KOI8-R */
265
  PG_WIN1251,         /* windows-1251 */
266
  PG_WIN1252,         /* windows-1252 */
267
  PG_ISO_8859_5,        /* ISO-8859-5 */
268
  PG_ISO_8859_6,        /* ISO-8859-6 */
269
  PG_ISO_8859_7,        /* ISO-8859-7 */
270
  PG_ISO_8859_8,        /* ISO-8859-8 */
271
  PG_WIN1250,         /* windows-1250 */
272
  PG_WIN1253,         /* windows-1253 */
273
  PG_WIN1254,         /* windows-1254 */
274
  PG_WIN1255,         /* windows-1255 */
275
  PG_WIN1257,         /* windows-1257 */
276
  PG_KOI8U,         /* KOI8-U */
277
  /* PG_ENCODING_BE_LAST points to the above entry */
278
279
  /* followings are for client encoding only */
280
  PG_SJIS,          /* Shift JIS (Windows-932) */
281
  PG_BIG5,          /* Big5 (Windows-950) */
282
  PG_GBK,           /* GBK (Windows-936) */
283
  PG_UHC,           /* UHC (Windows-949) */
284
  PG_GB18030,         /* GB18030 */
285
  PG_JOHAB,         /* EUC for Korean JOHAB */
286
  PG_SHIFT_JIS_2004,      /* Shift-JIS-2004 */
287
  _PG_LAST_ENCODING_      /* mark only */
288
289
} pg_enc;
290
291
0
#define PG_ENCODING_BE_LAST PG_KOI8U
292
293
/*
294
 * Please use these tests before access to pg_enc2name_tbl[]
295
 * or to other places...
296
 */
297
#define PG_VALID_BE_ENCODING(_enc) \
298
0
    ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST)
299
300
#define PG_ENCODING_IS_CLIENT_ONLY(_enc) \
301
0
    ((_enc) > PG_ENCODING_BE_LAST && (_enc) < _PG_LAST_ENCODING_)
302
303
#define PG_VALID_ENCODING(_enc) \
304
643
    ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_)
305
306
/* On FE are possible all encodings */
307
0
#define PG_VALID_FE_ENCODING(_enc)  PG_VALID_ENCODING(_enc)
308
309
/*
310
 * When converting strings between different encodings, we assume that space
311
 * for converted result is 4-to-1 growth in the worst case.  The rate for
312
 * currently supported encoding pairs are within 3 (SJIS JIS X0201 half width
313
 * kana -> UTF8 is the worst case).  So "4" should be enough for the moment.
314
 *
315
 * Note that this is not the same as the maximum character width in any
316
 * particular encoding.
317
 */
318
0
#define MAX_CONVERSION_GROWTH  4
319
320
/*
321
 * Maximum byte length of a string that's required in any encoding to convert
322
 * at least one character to any other encoding.  In other words, if you feed
323
 * MAX_CONVERSION_INPUT_LENGTH bytes to any encoding conversion function, it
324
 * is guaranteed to be able to convert something without needing more input
325
 * (assuming the input is valid).
326
 *
327
 * Currently, the maximum case is the conversion UTF8 -> SJIS JIS X0201 half
328
 * width kana, where a pair of UTF-8 characters is converted into a single
329
 * SHIFT_JIS_2004 character (the reverse of the worst case for
330
 * MAX_CONVERSION_GROWTH).  It needs 6 bytes of input.  In theory, a
331
 * user-defined conversion function might have more complicated cases, although
332
 * for the reverse mapping you would probably also need to bump up
333
 * MAX_CONVERSION_GROWTH.  But there is no need to be stingy here, so make it
334
 * generous.
335
 */
336
0
#define MAX_CONVERSION_INPUT_LENGTH 16
337
338
/*
339
 * Maximum byte length of the string equivalent to any one Unicode code point,
340
 * in any backend encoding.  The current value assumes that a 4-byte UTF-8
341
 * character might expand by MAX_CONVERSION_GROWTH, which is a huge
342
 * overestimate.  But in current usage we don't allocate large multiples of
343
 * this, so there's little point in being stingy.
344
 */
345
0
#define MAX_UNICODE_EQUIVALENT_STRING 16
346
347
/*
348
 * Table for mapping an encoding number to official encoding name and
349
 * possibly other subsidiary data.  Be careful to check encoding number
350
 * before accessing a table entry!
351
 *
352
 * if (PG_VALID_ENCODING(encoding))
353
 *    pg_enc2name_tbl[ encoding ];
354
 */
355
typedef struct pg_enc2name
356
{
357
  const char *name;
358
  pg_enc    encoding;
359
#ifdef WIN32
360
  unsigned  codepage;   /* codepage for WIN32 */
361
#endif
362
} pg_enc2name;
363
364
extern PGDLLIMPORT const pg_enc2name pg_enc2name_tbl[];
365
366
/*
367
 * Encoding names for gettext
368
 */
369
extern PGDLLIMPORT const char *pg_enc2gettext_tbl[];
370
371
/*
372
 * pg_wchar stuff
373
 */
374
typedef int (*mb2wchar_with_len_converter) (const unsigned char *from,
375
                      pg_wchar *to,
376
                      int len);
377
378
typedef int (*wchar2mb_with_len_converter) (const pg_wchar *from,
379
                      unsigned char *to,
380
                      int len);
381
382
typedef int (*mblen_converter) (const unsigned char *mbstr);
383
384
typedef int (*mbdisplaylen_converter) (const unsigned char *mbstr);
385
386
typedef bool (*mbcharacter_incrementer) (unsigned char *mbstr, int len);
387
388
typedef int (*mbchar_verifier) (const unsigned char *mbstr, int len);
389
390
typedef int (*mbstr_verifier) (const unsigned char *mbstr, int len);
391
392
typedef struct
393
{
394
  mb2wchar_with_len_converter mb2wchar_with_len;  /* convert a multibyte
395
                           * string to a wchar */
396
  wchar2mb_with_len_converter wchar2mb_with_len;  /* convert a wchar string
397
                           * to a multibyte */
398
  mblen_converter mblen;    /* get byte length of a char */
399
  mbdisplaylen_converter dsplen;  /* get display width of a char */
400
  mbchar_verifier mbverifychar; /* verify multibyte character */
401
  mbstr_verifier mbverifystr; /* verify multibyte string */
402
  int     maxmblen;   /* max bytes for a char in this encoding */
403
} pg_wchar_tbl;
404
405
extern PGDLLIMPORT const pg_wchar_tbl pg_wchar_table[];
406
407
/*
408
 * Data structures for conversions between UTF-8 and other encodings
409
 * (UtfToLocal() and LocalToUtf()).  In these data structures, characters of
410
 * either encoding are represented by uint32 words; hence we can only support
411
 * characters up to 4 bytes long.  For example, the byte sequence 0xC2 0x89
412
 * would be represented by 0x0000C289, and 0xE8 0xA2 0xB4 by 0x00E8A2B4.
413
 *
414
 * There are three possible ways a character can be mapped:
415
 *
416
 * 1. Using a radix tree, from source to destination code.
417
 * 2. Using a sorted array of source -> destination code pairs. This
418
 *    method is used for "combining" characters. There are so few of
419
 *    them that building a radix tree would be wasteful.
420
 * 3. Using a conversion function.
421
 */
422
423
/*
424
 * Radix tree for character conversion.
425
 *
426
 * Logically, this is actually four different radix trees, for 1-byte,
427
 * 2-byte, 3-byte and 4-byte inputs. The 1-byte tree is a simple lookup
428
 * table from source to target code. The 2-byte tree consists of two levels:
429
 * one lookup table for the first byte, where the value in the lookup table
430
 * points to a lookup table for the second byte. And so on.
431
 *
432
 * Physically, all the trees are stored in one big array, in 'chars16' or
433
 * 'chars32', depending on the maximum value that needs to be represented. For
434
 * each level in each tree, we also store lower and upper bound of allowed
435
 * values - values outside those bounds are considered invalid, and are left
436
 * out of the tables.
437
 *
438
 * In the intermediate levels of the trees, the values stored are offsets
439
 * into the chars[16|32] array.
440
 *
441
 * In the beginning of the chars[16|32] array, there is always a number of
442
 * zeros, so that you safely follow an index from an intermediate table
443
 * without explicitly checking for a zero. Following a zero any number of
444
 * times will always bring you to the dummy, all-zeros table in the
445
 * beginning. This helps to shave some cycles when looking up values.
446
 */
447
typedef struct
448
{
449
  /*
450
   * Array containing all the values. Only one of chars16 or chars32 is
451
   * used, depending on how wide the values we need to represent are.
452
   */
453
  const uint16 *chars16;
454
  const uint32 *chars32;
455
456
  /* Radix tree for 1-byte inputs */
457
  uint32    b1root;     /* offset of table in the chars[16|32] array */
458
  uint8   b1_lower;   /* min allowed value for a single byte input */
459
  uint8   b1_upper;   /* max allowed value for a single byte input */
460
461
  /* Radix tree for 2-byte inputs */
462
  uint32    b2root;     /* offset of 1st byte's table */
463
  uint8   b2_1_lower;   /* min/max allowed value for 1st input byte */
464
  uint8   b2_1_upper;
465
  uint8   b2_2_lower;   /* min/max allowed value for 2nd input byte */
466
  uint8   b2_2_upper;
467
468
  /* Radix tree for 3-byte inputs */
469
  uint32    b3root;     /* offset of 1st byte's table */
470
  uint8   b3_1_lower;   /* min/max allowed value for 1st input byte */
471
  uint8   b3_1_upper;
472
  uint8   b3_2_lower;   /* min/max allowed value for 2nd input byte */
473
  uint8   b3_2_upper;
474
  uint8   b3_3_lower;   /* min/max allowed value for 3rd input byte */
475
  uint8   b3_3_upper;
476
477
  /* Radix tree for 4-byte inputs */
478
  uint32    b4root;     /* offset of 1st byte's table */
479
  uint8   b4_1_lower;   /* min/max allowed value for 1st input byte */
480
  uint8   b4_1_upper;
481
  uint8   b4_2_lower;   /* min/max allowed value for 2nd input byte */
482
  uint8   b4_2_upper;
483
  uint8   b4_3_lower;   /* min/max allowed value for 3rd input byte */
484
  uint8   b4_3_upper;
485
  uint8   b4_4_lower;   /* min/max allowed value for 4th input byte */
486
  uint8   b4_4_upper;
487
488
} pg_mb_radix_tree;
489
490
/*
491
 * UTF-8 to local code conversion map (for combined characters)
492
 */
493
typedef struct
494
{
495
  uint32    utf1;     /* UTF-8 code 1 */
496
  uint32    utf2;     /* UTF-8 code 2 */
497
  uint32    code;     /* local code */
498
} pg_utf_to_local_combined;
499
500
/*
501
 * local code to UTF-8 conversion map (for combined characters)
502
 */
503
typedef struct
504
{
505
  uint32    code;     /* local code */
506
  uint32    utf1;     /* UTF-8 code 1 */
507
  uint32    utf2;     /* UTF-8 code 2 */
508
} pg_local_to_utf_combined;
509
510
/*
511
 * callback function for algorithmic encoding conversions (in either direction)
512
 *
513
 * if function returns zero, it does not know how to convert the code
514
 */
515
typedef uint32 (*utf_local_conversion_func) (uint32 code);
516
517
/*
518
 * Support macro for encoding conversion functions to validate their
519
 * arguments.  (This could be made more compact if we included fmgr.h
520
 * here, but we don't want to do that because this header file is also
521
 * used by frontends.)
522
 */
523
#define CHECK_ENCODING_CONVERSION_ARGS(srcencoding,destencoding) \
524
  check_encoding_conversion_args(PG_GETARG_INT32(0), \
525
                   PG_GETARG_INT32(1), \
526
                   PG_GETARG_INT32(4), \
527
                   (srcencoding), \
528
                   (destencoding))
529
530
531
/*
532
 * Some handy functions for Unicode-specific tests.
533
 */
534
static inline bool
535
is_valid_unicode_codepoint(pg_wchar c)
536
1.69k
{
537
1.69k
  return (c > 0 && c <= 0x10FFFF);
538
1.69k
}
Unexecuted instantiation: json_parser_fuzzer.c:is_valid_unicode_codepoint
Unexecuted instantiation: fuzzer_initialize.c:is_valid_unicode_codepoint
Unexecuted instantiation: printsimple.c:is_valid_unicode_codepoint
Unexecuted instantiation: printtup.c:is_valid_unicode_codepoint
Unexecuted instantiation: spgtextproc.c:is_valid_unicode_codepoint
Unexecuted instantiation: parallel.c:is_valid_unicode_codepoint
Unexecuted instantiation: namespace.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_collation.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_conversion.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_proc.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_type.c:is_valid_unicode_codepoint
Unexecuted instantiation: parse_node.c:is_valid_unicode_codepoint
Unexecuted instantiation: parser.c:is_valid_unicode_codepoint
Unexecuted instantiation: scan.c:is_valid_unicode_codepoint
Unexecuted instantiation: scansup.c:is_valid_unicode_codepoint
Unexecuted instantiation: async.c:is_valid_unicode_codepoint
Unexecuted instantiation: collationcmds.c:is_valid_unicode_codepoint
Unexecuted instantiation: conversioncmds.c:is_valid_unicode_codepoint
Unexecuted instantiation: copy.c:is_valid_unicode_codepoint
Unexecuted instantiation: copyfrom.c:is_valid_unicode_codepoint
Unexecuted instantiation: copyfromparse.c:is_valid_unicode_codepoint
Unexecuted instantiation: copyto.c:is_valid_unicode_codepoint
Unexecuted instantiation: dbcommands.c:is_valid_unicode_codepoint
Unexecuted instantiation: explain.c:is_valid_unicode_codepoint
Unexecuted instantiation: explain_dr.c:is_valid_unicode_codepoint
Unexecuted instantiation: extension.c:is_valid_unicode_codepoint
Unexecuted instantiation: indexcmds.c:is_valid_unicode_codepoint
Unexecuted instantiation: variable.c:is_valid_unicode_codepoint
Unexecuted instantiation: execMain.c:is_valid_unicode_codepoint
Unexecuted instantiation: execPartition.c:is_valid_unicode_codepoint
Unexecuted instantiation: execUtils.c:is_valid_unicode_codepoint
Unexecuted instantiation: auth-oauth.c:is_valid_unicode_codepoint
Unexecuted instantiation: auth-sasl.c:is_valid_unicode_codepoint
Unexecuted instantiation: auth-scram.c:is_valid_unicode_codepoint
Unexecuted instantiation: auth.c:is_valid_unicode_codepoint
Unexecuted instantiation: be-secure-common.c:is_valid_unicode_codepoint
Unexecuted instantiation: be-secure.c:is_valid_unicode_codepoint
Unexecuted instantiation: crypt.c:is_valid_unicode_codepoint
Unexecuted instantiation: hba.c:is_valid_unicode_codepoint
Unexecuted instantiation: pqcomm.c:is_valid_unicode_codepoint
Unexecuted instantiation: pqformat.c:is_valid_unicode_codepoint
Unexecuted instantiation: pqmq.c:is_valid_unicode_codepoint
Unexecuted instantiation: launch_backend.c:is_valid_unicode_codepoint
Unexecuted instantiation: postmaster.c:is_valid_unicode_codepoint
Unexecuted instantiation: regcomp.c:is_valid_unicode_codepoint
Unexecuted instantiation: regerror.c:is_valid_unicode_codepoint
Unexecuted instantiation: regexec.c:is_valid_unicode_codepoint
Unexecuted instantiation: regexport.c:is_valid_unicode_codepoint
Unexecuted instantiation: regfree.c:is_valid_unicode_codepoint
Unexecuted instantiation: regprefix.c:is_valid_unicode_codepoint
Unexecuted instantiation: applyparallelworker.c:is_valid_unicode_codepoint
Unexecuted instantiation: logicalfuncs.c:is_valid_unicode_codepoint
Unexecuted instantiation: proto.c:is_valid_unicode_codepoint
Unexecuted instantiation: worker.c:is_valid_unicode_codepoint
Unexecuted instantiation: walreceiver.c:is_valid_unicode_codepoint
Unexecuted instantiation: walsender.c:is_valid_unicode_codepoint
Unexecuted instantiation: backup_manifest.c:is_valid_unicode_codepoint
Unexecuted instantiation: basebackup_copy.c:is_valid_unicode_codepoint
Unexecuted instantiation: basebackup_incremental.c:is_valid_unicode_codepoint
Unexecuted instantiation: backend_startup.c:is_valid_unicode_codepoint
Unexecuted instantiation: dest.c:is_valid_unicode_codepoint
Unexecuted instantiation: fastpath.c:is_valid_unicode_codepoint
Unexecuted instantiation: postgres.c:is_valid_unicode_codepoint
Unexecuted instantiation: dict_ispell.c:is_valid_unicode_codepoint
Unexecuted instantiation: dict_synonym.c:is_valid_unicode_codepoint
Unexecuted instantiation: dict_thesaurus.c:is_valid_unicode_codepoint
Unexecuted instantiation: regis.c:is_valid_unicode_codepoint
Unexecuted instantiation: spell.c:is_valid_unicode_codepoint
Unexecuted instantiation: ts_locale.c:is_valid_unicode_codepoint
Unexecuted instantiation: ts_utils.c:is_valid_unicode_codepoint
Unexecuted instantiation: wparser_def.c:is_valid_unicode_codepoint
Unexecuted instantiation: backend_progress.c:is_valid_unicode_codepoint
Unexecuted instantiation: backend_status.c:is_valid_unicode_codepoint
Unexecuted instantiation: array_userfuncs.c:is_valid_unicode_codepoint
Unexecuted instantiation: arrayfuncs.c:is_valid_unicode_codepoint
Unexecuted instantiation: ascii.c:is_valid_unicode_codepoint
Unexecuted instantiation: bool.c:is_valid_unicode_codepoint
Unexecuted instantiation: cash.c:is_valid_unicode_codepoint
Unexecuted instantiation: char.c:is_valid_unicode_codepoint
Unexecuted instantiation: date.c:is_valid_unicode_codepoint
Unexecuted instantiation: encode.c:is_valid_unicode_codepoint
Unexecuted instantiation: enum.c:is_valid_unicode_codepoint
Unexecuted instantiation: float.c:is_valid_unicode_codepoint
Unexecuted instantiation: format_type.c:is_valid_unicode_codepoint
Unexecuted instantiation: formatting.c:is_valid_unicode_codepoint
Unexecuted instantiation: genfile.c:is_valid_unicode_codepoint
Unexecuted instantiation: geo_ops.c:is_valid_unicode_codepoint
Unexecuted instantiation: hbafuncs.c:is_valid_unicode_codepoint
Unexecuted instantiation: int.c:is_valid_unicode_codepoint
Unexecuted instantiation: int8.c:is_valid_unicode_codepoint
Unexecuted instantiation: json.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonb.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonfuncs.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonpath.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonpath_exec.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonpath_gram.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonpath_scan.c:is_valid_unicode_codepoint
Unexecuted instantiation: like.c:is_valid_unicode_codepoint
Unexecuted instantiation: like_support.c:is_valid_unicode_codepoint
Unexecuted instantiation: mac.c:is_valid_unicode_codepoint
Unexecuted instantiation: mac8.c:is_valid_unicode_codepoint
Unexecuted instantiation: mcxtfuncs.c:is_valid_unicode_codepoint
Unexecuted instantiation: multirangetypes.c:is_valid_unicode_codepoint
Unexecuted instantiation: name.c:is_valid_unicode_codepoint
Unexecuted instantiation: network.c:is_valid_unicode_codepoint
Unexecuted instantiation: numeric.c:is_valid_unicode_codepoint
Unexecuted instantiation: oid.c:is_valid_unicode_codepoint
Unexecuted instantiation: oracle_compat.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_locale.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_locale_builtin.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_locale_icu.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_locale_libc.c:is_valid_unicode_codepoint
Unexecuted instantiation: pg_lsn.c:is_valid_unicode_codepoint
Unexecuted instantiation: pseudotypes.c:is_valid_unicode_codepoint
Unexecuted instantiation: rangetypes.c:is_valid_unicode_codepoint
Unexecuted instantiation: regexp.c:is_valid_unicode_codepoint
Unexecuted instantiation: regproc.c:is_valid_unicode_codepoint
Unexecuted instantiation: rowtypes.c:is_valid_unicode_codepoint
Unexecuted instantiation: ruleutils.c:is_valid_unicode_codepoint
Unexecuted instantiation: tid.c:is_valid_unicode_codepoint
Unexecuted instantiation: timestamp.c:is_valid_unicode_codepoint
Unexecuted instantiation: tsquery.c:is_valid_unicode_codepoint
Unexecuted instantiation: tsvector.c:is_valid_unicode_codepoint
Unexecuted instantiation: tsvector_op.c:is_valid_unicode_codepoint
Unexecuted instantiation: tsvector_parser.c:is_valid_unicode_codepoint
Unexecuted instantiation: uuid.c:is_valid_unicode_codepoint
Unexecuted instantiation: varbit.c:is_valid_unicode_codepoint
Unexecuted instantiation: varchar.c:is_valid_unicode_codepoint
Unexecuted instantiation: varlena.c:is_valid_unicode_codepoint
Unexecuted instantiation: xid.c:is_valid_unicode_codepoint
Unexecuted instantiation: xid8funcs.c:is_valid_unicode_codepoint
Unexecuted instantiation: xml.c:is_valid_unicode_codepoint
Unexecuted instantiation: csvlog.c:is_valid_unicode_codepoint
Unexecuted instantiation: elog.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonlog.c:is_valid_unicode_codepoint
Unexecuted instantiation: globals.c:is_valid_unicode_codepoint
Unexecuted instantiation: miscinit.c:is_valid_unicode_codepoint
Unexecuted instantiation: postinit.c:is_valid_unicode_codepoint
Unexecuted instantiation: conv.c:is_valid_unicode_codepoint
mbutils.c:is_valid_unicode_codepoint
Line
Count
Source
536
1.69k
{
537
1.69k
  return (c > 0 && c <= 0x10FFFF);
538
1.69k
}
Unexecuted instantiation: stringinfo_mb.c:is_valid_unicode_codepoint
Unexecuted instantiation: wstrcmp.c:is_valid_unicode_codepoint
Unexecuted instantiation: wstrncmp.c:is_valid_unicode_codepoint
Unexecuted instantiation: guc.c:is_valid_unicode_codepoint
Unexecuted instantiation: guc-file.c:is_valid_unicode_codepoint
Unexecuted instantiation: guc_tables.c:is_valid_unicode_codepoint
Unexecuted instantiation: mcxt.c:is_valid_unicode_codepoint
Unexecuted instantiation: encnames.c:is_valid_unicode_codepoint
Unexecuted instantiation: jsonapi.c:is_valid_unicode_codepoint
Unexecuted instantiation: parse_manifest.c:is_valid_unicode_codepoint
Unexecuted instantiation: saslprep.c:is_valid_unicode_codepoint
Unexecuted instantiation: unicode_case.c:is_valid_unicode_codepoint
Unexecuted instantiation: unicode_category.c:is_valid_unicode_codepoint
Unexecuted instantiation: unicode_norm.c:is_valid_unicode_codepoint
Unexecuted instantiation: wchar.c:is_valid_unicode_codepoint
Unexecuted instantiation: chklocale.c:is_valid_unicode_codepoint
Unexecuted instantiation: path.c:is_valid_unicode_codepoint
539
540
static inline bool
541
is_utf16_surrogate_first(pg_wchar c)
542
2.12k
{
543
2.12k
  return (c >= 0xD800 && c <= 0xDBFF);
544
2.12k
}
Unexecuted instantiation: json_parser_fuzzer.c:is_utf16_surrogate_first
Unexecuted instantiation: fuzzer_initialize.c:is_utf16_surrogate_first
Unexecuted instantiation: printsimple.c:is_utf16_surrogate_first
Unexecuted instantiation: printtup.c:is_utf16_surrogate_first
Unexecuted instantiation: spgtextproc.c:is_utf16_surrogate_first
Unexecuted instantiation: parallel.c:is_utf16_surrogate_first
Unexecuted instantiation: namespace.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_collation.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_conversion.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_proc.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_type.c:is_utf16_surrogate_first
Unexecuted instantiation: parse_node.c:is_utf16_surrogate_first
Unexecuted instantiation: parser.c:is_utf16_surrogate_first
Unexecuted instantiation: scan.c:is_utf16_surrogate_first
Unexecuted instantiation: scansup.c:is_utf16_surrogate_first
Unexecuted instantiation: async.c:is_utf16_surrogate_first
Unexecuted instantiation: collationcmds.c:is_utf16_surrogate_first
Unexecuted instantiation: conversioncmds.c:is_utf16_surrogate_first
Unexecuted instantiation: copy.c:is_utf16_surrogate_first
Unexecuted instantiation: copyfrom.c:is_utf16_surrogate_first
Unexecuted instantiation: copyfromparse.c:is_utf16_surrogate_first
Unexecuted instantiation: copyto.c:is_utf16_surrogate_first
Unexecuted instantiation: dbcommands.c:is_utf16_surrogate_first
Unexecuted instantiation: explain.c:is_utf16_surrogate_first
Unexecuted instantiation: explain_dr.c:is_utf16_surrogate_first
Unexecuted instantiation: extension.c:is_utf16_surrogate_first
Unexecuted instantiation: indexcmds.c:is_utf16_surrogate_first
Unexecuted instantiation: variable.c:is_utf16_surrogate_first
Unexecuted instantiation: execMain.c:is_utf16_surrogate_first
Unexecuted instantiation: execPartition.c:is_utf16_surrogate_first
Unexecuted instantiation: execUtils.c:is_utf16_surrogate_first
Unexecuted instantiation: auth-oauth.c:is_utf16_surrogate_first
Unexecuted instantiation: auth-sasl.c:is_utf16_surrogate_first
Unexecuted instantiation: auth-scram.c:is_utf16_surrogate_first
Unexecuted instantiation: auth.c:is_utf16_surrogate_first
Unexecuted instantiation: be-secure-common.c:is_utf16_surrogate_first
Unexecuted instantiation: be-secure.c:is_utf16_surrogate_first
Unexecuted instantiation: crypt.c:is_utf16_surrogate_first
Unexecuted instantiation: hba.c:is_utf16_surrogate_first
Unexecuted instantiation: pqcomm.c:is_utf16_surrogate_first
Unexecuted instantiation: pqformat.c:is_utf16_surrogate_first
Unexecuted instantiation: pqmq.c:is_utf16_surrogate_first
Unexecuted instantiation: launch_backend.c:is_utf16_surrogate_first
Unexecuted instantiation: postmaster.c:is_utf16_surrogate_first
Unexecuted instantiation: regcomp.c:is_utf16_surrogate_first
Unexecuted instantiation: regerror.c:is_utf16_surrogate_first
Unexecuted instantiation: regexec.c:is_utf16_surrogate_first
Unexecuted instantiation: regexport.c:is_utf16_surrogate_first
Unexecuted instantiation: regfree.c:is_utf16_surrogate_first
Unexecuted instantiation: regprefix.c:is_utf16_surrogate_first
Unexecuted instantiation: applyparallelworker.c:is_utf16_surrogate_first
Unexecuted instantiation: logicalfuncs.c:is_utf16_surrogate_first
Unexecuted instantiation: proto.c:is_utf16_surrogate_first
Unexecuted instantiation: worker.c:is_utf16_surrogate_first
Unexecuted instantiation: walreceiver.c:is_utf16_surrogate_first
Unexecuted instantiation: walsender.c:is_utf16_surrogate_first
Unexecuted instantiation: backup_manifest.c:is_utf16_surrogate_first
Unexecuted instantiation: basebackup_copy.c:is_utf16_surrogate_first
Unexecuted instantiation: basebackup_incremental.c:is_utf16_surrogate_first
Unexecuted instantiation: backend_startup.c:is_utf16_surrogate_first
Unexecuted instantiation: dest.c:is_utf16_surrogate_first
Unexecuted instantiation: fastpath.c:is_utf16_surrogate_first
Unexecuted instantiation: postgres.c:is_utf16_surrogate_first
Unexecuted instantiation: dict_ispell.c:is_utf16_surrogate_first
Unexecuted instantiation: dict_synonym.c:is_utf16_surrogate_first
Unexecuted instantiation: dict_thesaurus.c:is_utf16_surrogate_first
Unexecuted instantiation: regis.c:is_utf16_surrogate_first
Unexecuted instantiation: spell.c:is_utf16_surrogate_first
Unexecuted instantiation: ts_locale.c:is_utf16_surrogate_first
Unexecuted instantiation: ts_utils.c:is_utf16_surrogate_first
Unexecuted instantiation: wparser_def.c:is_utf16_surrogate_first
Unexecuted instantiation: backend_progress.c:is_utf16_surrogate_first
Unexecuted instantiation: backend_status.c:is_utf16_surrogate_first
Unexecuted instantiation: array_userfuncs.c:is_utf16_surrogate_first
Unexecuted instantiation: arrayfuncs.c:is_utf16_surrogate_first
Unexecuted instantiation: ascii.c:is_utf16_surrogate_first
Unexecuted instantiation: bool.c:is_utf16_surrogate_first
Unexecuted instantiation: cash.c:is_utf16_surrogate_first
Unexecuted instantiation: char.c:is_utf16_surrogate_first
Unexecuted instantiation: date.c:is_utf16_surrogate_first
Unexecuted instantiation: encode.c:is_utf16_surrogate_first
Unexecuted instantiation: enum.c:is_utf16_surrogate_first
Unexecuted instantiation: float.c:is_utf16_surrogate_first
Unexecuted instantiation: format_type.c:is_utf16_surrogate_first
Unexecuted instantiation: formatting.c:is_utf16_surrogate_first
Unexecuted instantiation: genfile.c:is_utf16_surrogate_first
Unexecuted instantiation: geo_ops.c:is_utf16_surrogate_first
Unexecuted instantiation: hbafuncs.c:is_utf16_surrogate_first
Unexecuted instantiation: int.c:is_utf16_surrogate_first
Unexecuted instantiation: int8.c:is_utf16_surrogate_first
Unexecuted instantiation: json.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonb.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonfuncs.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonpath.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonpath_exec.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonpath_gram.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonpath_scan.c:is_utf16_surrogate_first
Unexecuted instantiation: like.c:is_utf16_surrogate_first
Unexecuted instantiation: like_support.c:is_utf16_surrogate_first
Unexecuted instantiation: mac.c:is_utf16_surrogate_first
Unexecuted instantiation: mac8.c:is_utf16_surrogate_first
Unexecuted instantiation: mcxtfuncs.c:is_utf16_surrogate_first
Unexecuted instantiation: multirangetypes.c:is_utf16_surrogate_first
Unexecuted instantiation: name.c:is_utf16_surrogate_first
Unexecuted instantiation: network.c:is_utf16_surrogate_first
Unexecuted instantiation: numeric.c:is_utf16_surrogate_first
Unexecuted instantiation: oid.c:is_utf16_surrogate_first
Unexecuted instantiation: oracle_compat.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_locale.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_locale_builtin.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_locale_icu.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_locale_libc.c:is_utf16_surrogate_first
Unexecuted instantiation: pg_lsn.c:is_utf16_surrogate_first
Unexecuted instantiation: pseudotypes.c:is_utf16_surrogate_first
Unexecuted instantiation: rangetypes.c:is_utf16_surrogate_first
Unexecuted instantiation: regexp.c:is_utf16_surrogate_first
Unexecuted instantiation: regproc.c:is_utf16_surrogate_first
Unexecuted instantiation: rowtypes.c:is_utf16_surrogate_first
Unexecuted instantiation: ruleutils.c:is_utf16_surrogate_first
Unexecuted instantiation: tid.c:is_utf16_surrogate_first
Unexecuted instantiation: timestamp.c:is_utf16_surrogate_first
Unexecuted instantiation: tsquery.c:is_utf16_surrogate_first
Unexecuted instantiation: tsvector.c:is_utf16_surrogate_first
Unexecuted instantiation: tsvector_op.c:is_utf16_surrogate_first
Unexecuted instantiation: tsvector_parser.c:is_utf16_surrogate_first
Unexecuted instantiation: uuid.c:is_utf16_surrogate_first
Unexecuted instantiation: varbit.c:is_utf16_surrogate_first
Unexecuted instantiation: varchar.c:is_utf16_surrogate_first
Unexecuted instantiation: varlena.c:is_utf16_surrogate_first
Unexecuted instantiation: xid.c:is_utf16_surrogate_first
Unexecuted instantiation: xid8funcs.c:is_utf16_surrogate_first
Unexecuted instantiation: xml.c:is_utf16_surrogate_first
Unexecuted instantiation: csvlog.c:is_utf16_surrogate_first
Unexecuted instantiation: elog.c:is_utf16_surrogate_first
Unexecuted instantiation: jsonlog.c:is_utf16_surrogate_first
Unexecuted instantiation: globals.c:is_utf16_surrogate_first
Unexecuted instantiation: miscinit.c:is_utf16_surrogate_first
Unexecuted instantiation: postinit.c:is_utf16_surrogate_first
Unexecuted instantiation: conv.c:is_utf16_surrogate_first
Unexecuted instantiation: mbutils.c:is_utf16_surrogate_first
Unexecuted instantiation: stringinfo_mb.c:is_utf16_surrogate_first
Unexecuted instantiation: wstrcmp.c:is_utf16_surrogate_first
Unexecuted instantiation: wstrncmp.c:is_utf16_surrogate_first
Unexecuted instantiation: guc.c:is_utf16_surrogate_first
Unexecuted instantiation: guc-file.c:is_utf16_surrogate_first
Unexecuted instantiation: guc_tables.c:is_utf16_surrogate_first
Unexecuted instantiation: mcxt.c:is_utf16_surrogate_first
Unexecuted instantiation: encnames.c:is_utf16_surrogate_first
jsonapi.c:is_utf16_surrogate_first
Line
Count
Source
542
2.12k
{
543
2.12k
  return (c >= 0xD800 && c <= 0xDBFF);
544
2.12k
}
Unexecuted instantiation: parse_manifest.c:is_utf16_surrogate_first
Unexecuted instantiation: saslprep.c:is_utf16_surrogate_first
Unexecuted instantiation: unicode_case.c:is_utf16_surrogate_first
Unexecuted instantiation: unicode_category.c:is_utf16_surrogate_first
Unexecuted instantiation: unicode_norm.c:is_utf16_surrogate_first
Unexecuted instantiation: wchar.c:is_utf16_surrogate_first
Unexecuted instantiation: chklocale.c:is_utf16_surrogate_first
Unexecuted instantiation: path.c:is_utf16_surrogate_first
545
546
static inline bool
547
is_utf16_surrogate_second(pg_wchar c)
548
1.83k
{
549
1.83k
  return (c >= 0xDC00 && c <= 0xDFFF);
550
1.83k
}
Unexecuted instantiation: json_parser_fuzzer.c:is_utf16_surrogate_second
Unexecuted instantiation: fuzzer_initialize.c:is_utf16_surrogate_second
Unexecuted instantiation: printsimple.c:is_utf16_surrogate_second
Unexecuted instantiation: printtup.c:is_utf16_surrogate_second
Unexecuted instantiation: spgtextproc.c:is_utf16_surrogate_second
Unexecuted instantiation: parallel.c:is_utf16_surrogate_second
Unexecuted instantiation: namespace.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_collation.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_conversion.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_proc.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_type.c:is_utf16_surrogate_second
Unexecuted instantiation: parse_node.c:is_utf16_surrogate_second
Unexecuted instantiation: parser.c:is_utf16_surrogate_second
Unexecuted instantiation: scan.c:is_utf16_surrogate_second
Unexecuted instantiation: scansup.c:is_utf16_surrogate_second
Unexecuted instantiation: async.c:is_utf16_surrogate_second
Unexecuted instantiation: collationcmds.c:is_utf16_surrogate_second
Unexecuted instantiation: conversioncmds.c:is_utf16_surrogate_second
Unexecuted instantiation: copy.c:is_utf16_surrogate_second
Unexecuted instantiation: copyfrom.c:is_utf16_surrogate_second
Unexecuted instantiation: copyfromparse.c:is_utf16_surrogate_second
Unexecuted instantiation: copyto.c:is_utf16_surrogate_second
Unexecuted instantiation: dbcommands.c:is_utf16_surrogate_second
Unexecuted instantiation: explain.c:is_utf16_surrogate_second
Unexecuted instantiation: explain_dr.c:is_utf16_surrogate_second
Unexecuted instantiation: extension.c:is_utf16_surrogate_second
Unexecuted instantiation: indexcmds.c:is_utf16_surrogate_second
Unexecuted instantiation: variable.c:is_utf16_surrogate_second
Unexecuted instantiation: execMain.c:is_utf16_surrogate_second
Unexecuted instantiation: execPartition.c:is_utf16_surrogate_second
Unexecuted instantiation: execUtils.c:is_utf16_surrogate_second
Unexecuted instantiation: auth-oauth.c:is_utf16_surrogate_second
Unexecuted instantiation: auth-sasl.c:is_utf16_surrogate_second
Unexecuted instantiation: auth-scram.c:is_utf16_surrogate_second
Unexecuted instantiation: auth.c:is_utf16_surrogate_second
Unexecuted instantiation: be-secure-common.c:is_utf16_surrogate_second
Unexecuted instantiation: be-secure.c:is_utf16_surrogate_second
Unexecuted instantiation: crypt.c:is_utf16_surrogate_second
Unexecuted instantiation: hba.c:is_utf16_surrogate_second
Unexecuted instantiation: pqcomm.c:is_utf16_surrogate_second
Unexecuted instantiation: pqformat.c:is_utf16_surrogate_second
Unexecuted instantiation: pqmq.c:is_utf16_surrogate_second
Unexecuted instantiation: launch_backend.c:is_utf16_surrogate_second
Unexecuted instantiation: postmaster.c:is_utf16_surrogate_second
Unexecuted instantiation: regcomp.c:is_utf16_surrogate_second
Unexecuted instantiation: regerror.c:is_utf16_surrogate_second
Unexecuted instantiation: regexec.c:is_utf16_surrogate_second
Unexecuted instantiation: regexport.c:is_utf16_surrogate_second
Unexecuted instantiation: regfree.c:is_utf16_surrogate_second
Unexecuted instantiation: regprefix.c:is_utf16_surrogate_second
Unexecuted instantiation: applyparallelworker.c:is_utf16_surrogate_second
Unexecuted instantiation: logicalfuncs.c:is_utf16_surrogate_second
Unexecuted instantiation: proto.c:is_utf16_surrogate_second
Unexecuted instantiation: worker.c:is_utf16_surrogate_second
Unexecuted instantiation: walreceiver.c:is_utf16_surrogate_second
Unexecuted instantiation: walsender.c:is_utf16_surrogate_second
Unexecuted instantiation: backup_manifest.c:is_utf16_surrogate_second
Unexecuted instantiation: basebackup_copy.c:is_utf16_surrogate_second
Unexecuted instantiation: basebackup_incremental.c:is_utf16_surrogate_second
Unexecuted instantiation: backend_startup.c:is_utf16_surrogate_second
Unexecuted instantiation: dest.c:is_utf16_surrogate_second
Unexecuted instantiation: fastpath.c:is_utf16_surrogate_second
Unexecuted instantiation: postgres.c:is_utf16_surrogate_second
Unexecuted instantiation: dict_ispell.c:is_utf16_surrogate_second
Unexecuted instantiation: dict_synonym.c:is_utf16_surrogate_second
Unexecuted instantiation: dict_thesaurus.c:is_utf16_surrogate_second
Unexecuted instantiation: regis.c:is_utf16_surrogate_second
Unexecuted instantiation: spell.c:is_utf16_surrogate_second
Unexecuted instantiation: ts_locale.c:is_utf16_surrogate_second
Unexecuted instantiation: ts_utils.c:is_utf16_surrogate_second
Unexecuted instantiation: wparser_def.c:is_utf16_surrogate_second
Unexecuted instantiation: backend_progress.c:is_utf16_surrogate_second
Unexecuted instantiation: backend_status.c:is_utf16_surrogate_second
Unexecuted instantiation: array_userfuncs.c:is_utf16_surrogate_second
Unexecuted instantiation: arrayfuncs.c:is_utf16_surrogate_second
Unexecuted instantiation: ascii.c:is_utf16_surrogate_second
Unexecuted instantiation: bool.c:is_utf16_surrogate_second
Unexecuted instantiation: cash.c:is_utf16_surrogate_second
Unexecuted instantiation: char.c:is_utf16_surrogate_second
Unexecuted instantiation: date.c:is_utf16_surrogate_second
Unexecuted instantiation: encode.c:is_utf16_surrogate_second
Unexecuted instantiation: enum.c:is_utf16_surrogate_second
Unexecuted instantiation: float.c:is_utf16_surrogate_second
Unexecuted instantiation: format_type.c:is_utf16_surrogate_second
Unexecuted instantiation: formatting.c:is_utf16_surrogate_second
Unexecuted instantiation: genfile.c:is_utf16_surrogate_second
Unexecuted instantiation: geo_ops.c:is_utf16_surrogate_second
Unexecuted instantiation: hbafuncs.c:is_utf16_surrogate_second
Unexecuted instantiation: int.c:is_utf16_surrogate_second
Unexecuted instantiation: int8.c:is_utf16_surrogate_second
Unexecuted instantiation: json.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonb.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonfuncs.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonpath.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonpath_exec.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonpath_gram.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonpath_scan.c:is_utf16_surrogate_second
Unexecuted instantiation: like.c:is_utf16_surrogate_second
Unexecuted instantiation: like_support.c:is_utf16_surrogate_second
Unexecuted instantiation: mac.c:is_utf16_surrogate_second
Unexecuted instantiation: mac8.c:is_utf16_surrogate_second
Unexecuted instantiation: mcxtfuncs.c:is_utf16_surrogate_second
Unexecuted instantiation: multirangetypes.c:is_utf16_surrogate_second
Unexecuted instantiation: name.c:is_utf16_surrogate_second
Unexecuted instantiation: network.c:is_utf16_surrogate_second
Unexecuted instantiation: numeric.c:is_utf16_surrogate_second
Unexecuted instantiation: oid.c:is_utf16_surrogate_second
Unexecuted instantiation: oracle_compat.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_locale.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_locale_builtin.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_locale_icu.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_locale_libc.c:is_utf16_surrogate_second
Unexecuted instantiation: pg_lsn.c:is_utf16_surrogate_second
Unexecuted instantiation: pseudotypes.c:is_utf16_surrogate_second
Unexecuted instantiation: rangetypes.c:is_utf16_surrogate_second
Unexecuted instantiation: regexp.c:is_utf16_surrogate_second
Unexecuted instantiation: regproc.c:is_utf16_surrogate_second
Unexecuted instantiation: rowtypes.c:is_utf16_surrogate_second
Unexecuted instantiation: ruleutils.c:is_utf16_surrogate_second
Unexecuted instantiation: tid.c:is_utf16_surrogate_second
Unexecuted instantiation: timestamp.c:is_utf16_surrogate_second
Unexecuted instantiation: tsquery.c:is_utf16_surrogate_second
Unexecuted instantiation: tsvector.c:is_utf16_surrogate_second
Unexecuted instantiation: tsvector_op.c:is_utf16_surrogate_second
Unexecuted instantiation: tsvector_parser.c:is_utf16_surrogate_second
Unexecuted instantiation: uuid.c:is_utf16_surrogate_second
Unexecuted instantiation: varbit.c:is_utf16_surrogate_second
Unexecuted instantiation: varchar.c:is_utf16_surrogate_second
Unexecuted instantiation: varlena.c:is_utf16_surrogate_second
Unexecuted instantiation: xid.c:is_utf16_surrogate_second
Unexecuted instantiation: xid8funcs.c:is_utf16_surrogate_second
Unexecuted instantiation: xml.c:is_utf16_surrogate_second
Unexecuted instantiation: csvlog.c:is_utf16_surrogate_second
Unexecuted instantiation: elog.c:is_utf16_surrogate_second
Unexecuted instantiation: jsonlog.c:is_utf16_surrogate_second
Unexecuted instantiation: globals.c:is_utf16_surrogate_second
Unexecuted instantiation: miscinit.c:is_utf16_surrogate_second
Unexecuted instantiation: postinit.c:is_utf16_surrogate_second
Unexecuted instantiation: conv.c:is_utf16_surrogate_second
Unexecuted instantiation: mbutils.c:is_utf16_surrogate_second
Unexecuted instantiation: stringinfo_mb.c:is_utf16_surrogate_second
Unexecuted instantiation: wstrcmp.c:is_utf16_surrogate_second
Unexecuted instantiation: wstrncmp.c:is_utf16_surrogate_second
Unexecuted instantiation: guc.c:is_utf16_surrogate_second
Unexecuted instantiation: guc-file.c:is_utf16_surrogate_second
Unexecuted instantiation: guc_tables.c:is_utf16_surrogate_second
Unexecuted instantiation: mcxt.c:is_utf16_surrogate_second
Unexecuted instantiation: encnames.c:is_utf16_surrogate_second
jsonapi.c:is_utf16_surrogate_second
Line
Count
Source
548
1.83k
{
549
1.83k
  return (c >= 0xDC00 && c <= 0xDFFF);
550
1.83k
}
Unexecuted instantiation: parse_manifest.c:is_utf16_surrogate_second
Unexecuted instantiation: saslprep.c:is_utf16_surrogate_second
Unexecuted instantiation: unicode_case.c:is_utf16_surrogate_second
Unexecuted instantiation: unicode_category.c:is_utf16_surrogate_second
Unexecuted instantiation: unicode_norm.c:is_utf16_surrogate_second
Unexecuted instantiation: wchar.c:is_utf16_surrogate_second
Unexecuted instantiation: chklocale.c:is_utf16_surrogate_second
Unexecuted instantiation: path.c:is_utf16_surrogate_second
551
552
static inline pg_wchar
553
surrogate_pair_to_codepoint(pg_wchar first, pg_wchar second)
554
25
{
555
25
  return ((first & 0x3FF) << 10) + 0x10000 + (second & 0x3FF);
556
25
}
Unexecuted instantiation: json_parser_fuzzer.c:surrogate_pair_to_codepoint
Unexecuted instantiation: fuzzer_initialize.c:surrogate_pair_to_codepoint
Unexecuted instantiation: printsimple.c:surrogate_pair_to_codepoint
Unexecuted instantiation: printtup.c:surrogate_pair_to_codepoint
Unexecuted instantiation: spgtextproc.c:surrogate_pair_to_codepoint
Unexecuted instantiation: parallel.c:surrogate_pair_to_codepoint
Unexecuted instantiation: namespace.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_collation.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_conversion.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_proc.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_type.c:surrogate_pair_to_codepoint
Unexecuted instantiation: parse_node.c:surrogate_pair_to_codepoint
Unexecuted instantiation: parser.c:surrogate_pair_to_codepoint
Unexecuted instantiation: scan.c:surrogate_pair_to_codepoint
Unexecuted instantiation: scansup.c:surrogate_pair_to_codepoint
Unexecuted instantiation: async.c:surrogate_pair_to_codepoint
Unexecuted instantiation: collationcmds.c:surrogate_pair_to_codepoint
Unexecuted instantiation: conversioncmds.c:surrogate_pair_to_codepoint
Unexecuted instantiation: copy.c:surrogate_pair_to_codepoint
Unexecuted instantiation: copyfrom.c:surrogate_pair_to_codepoint
Unexecuted instantiation: copyfromparse.c:surrogate_pair_to_codepoint
Unexecuted instantiation: copyto.c:surrogate_pair_to_codepoint
Unexecuted instantiation: dbcommands.c:surrogate_pair_to_codepoint
Unexecuted instantiation: explain.c:surrogate_pair_to_codepoint
Unexecuted instantiation: explain_dr.c:surrogate_pair_to_codepoint
Unexecuted instantiation: extension.c:surrogate_pair_to_codepoint
Unexecuted instantiation: indexcmds.c:surrogate_pair_to_codepoint
Unexecuted instantiation: variable.c:surrogate_pair_to_codepoint
Unexecuted instantiation: execMain.c:surrogate_pair_to_codepoint
Unexecuted instantiation: execPartition.c:surrogate_pair_to_codepoint
Unexecuted instantiation: execUtils.c:surrogate_pair_to_codepoint
Unexecuted instantiation: auth-oauth.c:surrogate_pair_to_codepoint
Unexecuted instantiation: auth-sasl.c:surrogate_pair_to_codepoint
Unexecuted instantiation: auth-scram.c:surrogate_pair_to_codepoint
Unexecuted instantiation: auth.c:surrogate_pair_to_codepoint
Unexecuted instantiation: be-secure-common.c:surrogate_pair_to_codepoint
Unexecuted instantiation: be-secure.c:surrogate_pair_to_codepoint
Unexecuted instantiation: crypt.c:surrogate_pair_to_codepoint
Unexecuted instantiation: hba.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pqcomm.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pqformat.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pqmq.c:surrogate_pair_to_codepoint
Unexecuted instantiation: launch_backend.c:surrogate_pair_to_codepoint
Unexecuted instantiation: postmaster.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regcomp.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regerror.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regexec.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regexport.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regfree.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regprefix.c:surrogate_pair_to_codepoint
Unexecuted instantiation: applyparallelworker.c:surrogate_pair_to_codepoint
Unexecuted instantiation: logicalfuncs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: proto.c:surrogate_pair_to_codepoint
Unexecuted instantiation: worker.c:surrogate_pair_to_codepoint
Unexecuted instantiation: walreceiver.c:surrogate_pair_to_codepoint
Unexecuted instantiation: walsender.c:surrogate_pair_to_codepoint
Unexecuted instantiation: backup_manifest.c:surrogate_pair_to_codepoint
Unexecuted instantiation: basebackup_copy.c:surrogate_pair_to_codepoint
Unexecuted instantiation: basebackup_incremental.c:surrogate_pair_to_codepoint
Unexecuted instantiation: backend_startup.c:surrogate_pair_to_codepoint
Unexecuted instantiation: dest.c:surrogate_pair_to_codepoint
Unexecuted instantiation: fastpath.c:surrogate_pair_to_codepoint
Unexecuted instantiation: postgres.c:surrogate_pair_to_codepoint
Unexecuted instantiation: dict_ispell.c:surrogate_pair_to_codepoint
Unexecuted instantiation: dict_synonym.c:surrogate_pair_to_codepoint
Unexecuted instantiation: dict_thesaurus.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regis.c:surrogate_pair_to_codepoint
Unexecuted instantiation: spell.c:surrogate_pair_to_codepoint
Unexecuted instantiation: ts_locale.c:surrogate_pair_to_codepoint
Unexecuted instantiation: ts_utils.c:surrogate_pair_to_codepoint
Unexecuted instantiation: wparser_def.c:surrogate_pair_to_codepoint
Unexecuted instantiation: backend_progress.c:surrogate_pair_to_codepoint
Unexecuted instantiation: backend_status.c:surrogate_pair_to_codepoint
Unexecuted instantiation: array_userfuncs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: arrayfuncs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: ascii.c:surrogate_pair_to_codepoint
Unexecuted instantiation: bool.c:surrogate_pair_to_codepoint
Unexecuted instantiation: cash.c:surrogate_pair_to_codepoint
Unexecuted instantiation: char.c:surrogate_pair_to_codepoint
Unexecuted instantiation: date.c:surrogate_pair_to_codepoint
Unexecuted instantiation: encode.c:surrogate_pair_to_codepoint
Unexecuted instantiation: enum.c:surrogate_pair_to_codepoint
Unexecuted instantiation: float.c:surrogate_pair_to_codepoint
Unexecuted instantiation: format_type.c:surrogate_pair_to_codepoint
Unexecuted instantiation: formatting.c:surrogate_pair_to_codepoint
Unexecuted instantiation: genfile.c:surrogate_pair_to_codepoint
Unexecuted instantiation: geo_ops.c:surrogate_pair_to_codepoint
Unexecuted instantiation: hbafuncs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: int.c:surrogate_pair_to_codepoint
Unexecuted instantiation: int8.c:surrogate_pair_to_codepoint
Unexecuted instantiation: json.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonb.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonfuncs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonpath.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonpath_exec.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonpath_gram.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonpath_scan.c:surrogate_pair_to_codepoint
Unexecuted instantiation: like.c:surrogate_pair_to_codepoint
Unexecuted instantiation: like_support.c:surrogate_pair_to_codepoint
Unexecuted instantiation: mac.c:surrogate_pair_to_codepoint
Unexecuted instantiation: mac8.c:surrogate_pair_to_codepoint
Unexecuted instantiation: mcxtfuncs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: multirangetypes.c:surrogate_pair_to_codepoint
Unexecuted instantiation: name.c:surrogate_pair_to_codepoint
Unexecuted instantiation: network.c:surrogate_pair_to_codepoint
Unexecuted instantiation: numeric.c:surrogate_pair_to_codepoint
Unexecuted instantiation: oid.c:surrogate_pair_to_codepoint
Unexecuted instantiation: oracle_compat.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_locale.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_locale_builtin.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_locale_icu.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_locale_libc.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pg_lsn.c:surrogate_pair_to_codepoint
Unexecuted instantiation: pseudotypes.c:surrogate_pair_to_codepoint
Unexecuted instantiation: rangetypes.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regexp.c:surrogate_pair_to_codepoint
Unexecuted instantiation: regproc.c:surrogate_pair_to_codepoint
Unexecuted instantiation: rowtypes.c:surrogate_pair_to_codepoint
Unexecuted instantiation: ruleutils.c:surrogate_pair_to_codepoint
Unexecuted instantiation: tid.c:surrogate_pair_to_codepoint
Unexecuted instantiation: timestamp.c:surrogate_pair_to_codepoint
Unexecuted instantiation: tsquery.c:surrogate_pair_to_codepoint
Unexecuted instantiation: tsvector.c:surrogate_pair_to_codepoint
Unexecuted instantiation: tsvector_op.c:surrogate_pair_to_codepoint
Unexecuted instantiation: tsvector_parser.c:surrogate_pair_to_codepoint
Unexecuted instantiation: uuid.c:surrogate_pair_to_codepoint
Unexecuted instantiation: varbit.c:surrogate_pair_to_codepoint
Unexecuted instantiation: varchar.c:surrogate_pair_to_codepoint
Unexecuted instantiation: varlena.c:surrogate_pair_to_codepoint
Unexecuted instantiation: xid.c:surrogate_pair_to_codepoint
Unexecuted instantiation: xid8funcs.c:surrogate_pair_to_codepoint
Unexecuted instantiation: xml.c:surrogate_pair_to_codepoint
Unexecuted instantiation: csvlog.c:surrogate_pair_to_codepoint
Unexecuted instantiation: elog.c:surrogate_pair_to_codepoint
Unexecuted instantiation: jsonlog.c:surrogate_pair_to_codepoint
Unexecuted instantiation: globals.c:surrogate_pair_to_codepoint
Unexecuted instantiation: miscinit.c:surrogate_pair_to_codepoint
Unexecuted instantiation: postinit.c:surrogate_pair_to_codepoint
Unexecuted instantiation: conv.c:surrogate_pair_to_codepoint
Unexecuted instantiation: mbutils.c:surrogate_pair_to_codepoint
Unexecuted instantiation: stringinfo_mb.c:surrogate_pair_to_codepoint
Unexecuted instantiation: wstrcmp.c:surrogate_pair_to_codepoint
Unexecuted instantiation: wstrncmp.c:surrogate_pair_to_codepoint
Unexecuted instantiation: guc.c:surrogate_pair_to_codepoint
Unexecuted instantiation: guc-file.c:surrogate_pair_to_codepoint
Unexecuted instantiation: guc_tables.c:surrogate_pair_to_codepoint
Unexecuted instantiation: mcxt.c:surrogate_pair_to_codepoint
Unexecuted instantiation: encnames.c:surrogate_pair_to_codepoint
jsonapi.c:surrogate_pair_to_codepoint
Line
Count
Source
554
25
{
555
25
  return ((first & 0x3FF) << 10) + 0x10000 + (second & 0x3FF);
556
25
}
Unexecuted instantiation: parse_manifest.c:surrogate_pair_to_codepoint
Unexecuted instantiation: saslprep.c:surrogate_pair_to_codepoint
Unexecuted instantiation: unicode_case.c:surrogate_pair_to_codepoint
Unexecuted instantiation: unicode_category.c:surrogate_pair_to_codepoint
Unexecuted instantiation: unicode_norm.c:surrogate_pair_to_codepoint
Unexecuted instantiation: wchar.c:surrogate_pair_to_codepoint
Unexecuted instantiation: chklocale.c:surrogate_pair_to_codepoint
Unexecuted instantiation: path.c:surrogate_pair_to_codepoint
557
558
/*
559
 * Convert a UTF-8 character to a Unicode code point.
560
 * This is a one-character version of pg_utf2wchar_with_len.
561
 *
562
 * No error checks here, c must point to a long-enough string.
563
 */
564
static inline pg_wchar
565
utf8_to_unicode(const unsigned char *c)
566
0
{
567
0
  if ((*c & 0x80) == 0)
568
0
    return (pg_wchar) c[0];
569
0
  else if ((*c & 0xe0) == 0xc0)
570
0
    return (pg_wchar) (((c[0] & 0x1f) << 6) |
571
0
               (c[1] & 0x3f));
572
0
  else if ((*c & 0xf0) == 0xe0)
573
0
    return (pg_wchar) (((c[0] & 0x0f) << 12) |
574
0
               ((c[1] & 0x3f) << 6) |
575
0
               (c[2] & 0x3f));
576
0
  else if ((*c & 0xf8) == 0xf0)
577
0
    return (pg_wchar) (((c[0] & 0x07) << 18) |
578
0
               ((c[1] & 0x3f) << 12) |
579
0
               ((c[2] & 0x3f) << 6) |
580
0
               (c[3] & 0x3f));
581
0
  else
582
    /* that is an invalid code on purpose */
583
0
    return 0xffffffff;
584
0
}
Unexecuted instantiation: json_parser_fuzzer.c:utf8_to_unicode
Unexecuted instantiation: fuzzer_initialize.c:utf8_to_unicode
Unexecuted instantiation: printsimple.c:utf8_to_unicode
Unexecuted instantiation: printtup.c:utf8_to_unicode
Unexecuted instantiation: spgtextproc.c:utf8_to_unicode
Unexecuted instantiation: parallel.c:utf8_to_unicode
Unexecuted instantiation: namespace.c:utf8_to_unicode
Unexecuted instantiation: pg_collation.c:utf8_to_unicode
Unexecuted instantiation: pg_conversion.c:utf8_to_unicode
Unexecuted instantiation: pg_proc.c:utf8_to_unicode
Unexecuted instantiation: pg_type.c:utf8_to_unicode
Unexecuted instantiation: parse_node.c:utf8_to_unicode
Unexecuted instantiation: parser.c:utf8_to_unicode
Unexecuted instantiation: scan.c:utf8_to_unicode
Unexecuted instantiation: scansup.c:utf8_to_unicode
Unexecuted instantiation: async.c:utf8_to_unicode
Unexecuted instantiation: collationcmds.c:utf8_to_unicode
Unexecuted instantiation: conversioncmds.c:utf8_to_unicode
Unexecuted instantiation: copy.c:utf8_to_unicode
Unexecuted instantiation: copyfrom.c:utf8_to_unicode
Unexecuted instantiation: copyfromparse.c:utf8_to_unicode
Unexecuted instantiation: copyto.c:utf8_to_unicode
Unexecuted instantiation: dbcommands.c:utf8_to_unicode
Unexecuted instantiation: explain.c:utf8_to_unicode
Unexecuted instantiation: explain_dr.c:utf8_to_unicode
Unexecuted instantiation: extension.c:utf8_to_unicode
Unexecuted instantiation: indexcmds.c:utf8_to_unicode
Unexecuted instantiation: variable.c:utf8_to_unicode
Unexecuted instantiation: execMain.c:utf8_to_unicode
Unexecuted instantiation: execPartition.c:utf8_to_unicode
Unexecuted instantiation: execUtils.c:utf8_to_unicode
Unexecuted instantiation: auth-oauth.c:utf8_to_unicode
Unexecuted instantiation: auth-sasl.c:utf8_to_unicode
Unexecuted instantiation: auth-scram.c:utf8_to_unicode
Unexecuted instantiation: auth.c:utf8_to_unicode
Unexecuted instantiation: be-secure-common.c:utf8_to_unicode
Unexecuted instantiation: be-secure.c:utf8_to_unicode
Unexecuted instantiation: crypt.c:utf8_to_unicode
Unexecuted instantiation: hba.c:utf8_to_unicode
Unexecuted instantiation: pqcomm.c:utf8_to_unicode
Unexecuted instantiation: pqformat.c:utf8_to_unicode
Unexecuted instantiation: pqmq.c:utf8_to_unicode
Unexecuted instantiation: launch_backend.c:utf8_to_unicode
Unexecuted instantiation: postmaster.c:utf8_to_unicode
Unexecuted instantiation: regcomp.c:utf8_to_unicode
Unexecuted instantiation: regerror.c:utf8_to_unicode
Unexecuted instantiation: regexec.c:utf8_to_unicode
Unexecuted instantiation: regexport.c:utf8_to_unicode
Unexecuted instantiation: regfree.c:utf8_to_unicode
Unexecuted instantiation: regprefix.c:utf8_to_unicode
Unexecuted instantiation: applyparallelworker.c:utf8_to_unicode
Unexecuted instantiation: logicalfuncs.c:utf8_to_unicode
Unexecuted instantiation: proto.c:utf8_to_unicode
Unexecuted instantiation: worker.c:utf8_to_unicode
Unexecuted instantiation: walreceiver.c:utf8_to_unicode
Unexecuted instantiation: walsender.c:utf8_to_unicode
Unexecuted instantiation: backup_manifest.c:utf8_to_unicode
Unexecuted instantiation: basebackup_copy.c:utf8_to_unicode
Unexecuted instantiation: basebackup_incremental.c:utf8_to_unicode
Unexecuted instantiation: backend_startup.c:utf8_to_unicode
Unexecuted instantiation: dest.c:utf8_to_unicode
Unexecuted instantiation: fastpath.c:utf8_to_unicode
Unexecuted instantiation: postgres.c:utf8_to_unicode
Unexecuted instantiation: dict_ispell.c:utf8_to_unicode
Unexecuted instantiation: dict_synonym.c:utf8_to_unicode
Unexecuted instantiation: dict_thesaurus.c:utf8_to_unicode
Unexecuted instantiation: regis.c:utf8_to_unicode
Unexecuted instantiation: spell.c:utf8_to_unicode
Unexecuted instantiation: ts_locale.c:utf8_to_unicode
Unexecuted instantiation: ts_utils.c:utf8_to_unicode
Unexecuted instantiation: wparser_def.c:utf8_to_unicode
Unexecuted instantiation: backend_progress.c:utf8_to_unicode
Unexecuted instantiation: backend_status.c:utf8_to_unicode
Unexecuted instantiation: array_userfuncs.c:utf8_to_unicode
Unexecuted instantiation: arrayfuncs.c:utf8_to_unicode
Unexecuted instantiation: ascii.c:utf8_to_unicode
Unexecuted instantiation: bool.c:utf8_to_unicode
Unexecuted instantiation: cash.c:utf8_to_unicode
Unexecuted instantiation: char.c:utf8_to_unicode
Unexecuted instantiation: date.c:utf8_to_unicode
Unexecuted instantiation: encode.c:utf8_to_unicode
Unexecuted instantiation: enum.c:utf8_to_unicode
Unexecuted instantiation: float.c:utf8_to_unicode
Unexecuted instantiation: format_type.c:utf8_to_unicode
Unexecuted instantiation: formatting.c:utf8_to_unicode
Unexecuted instantiation: genfile.c:utf8_to_unicode
Unexecuted instantiation: geo_ops.c:utf8_to_unicode
Unexecuted instantiation: hbafuncs.c:utf8_to_unicode
Unexecuted instantiation: int.c:utf8_to_unicode
Unexecuted instantiation: int8.c:utf8_to_unicode
Unexecuted instantiation: json.c:utf8_to_unicode
Unexecuted instantiation: jsonb.c:utf8_to_unicode
Unexecuted instantiation: jsonfuncs.c:utf8_to_unicode
Unexecuted instantiation: jsonpath.c:utf8_to_unicode
Unexecuted instantiation: jsonpath_exec.c:utf8_to_unicode
Unexecuted instantiation: jsonpath_gram.c:utf8_to_unicode
Unexecuted instantiation: jsonpath_scan.c:utf8_to_unicode
Unexecuted instantiation: like.c:utf8_to_unicode
Unexecuted instantiation: like_support.c:utf8_to_unicode
Unexecuted instantiation: mac.c:utf8_to_unicode
Unexecuted instantiation: mac8.c:utf8_to_unicode
Unexecuted instantiation: mcxtfuncs.c:utf8_to_unicode
Unexecuted instantiation: multirangetypes.c:utf8_to_unicode
Unexecuted instantiation: name.c:utf8_to_unicode
Unexecuted instantiation: network.c:utf8_to_unicode
Unexecuted instantiation: numeric.c:utf8_to_unicode
Unexecuted instantiation: oid.c:utf8_to_unicode
Unexecuted instantiation: oracle_compat.c:utf8_to_unicode
Unexecuted instantiation: pg_locale.c:utf8_to_unicode
Unexecuted instantiation: pg_locale_builtin.c:utf8_to_unicode
Unexecuted instantiation: pg_locale_icu.c:utf8_to_unicode
Unexecuted instantiation: pg_locale_libc.c:utf8_to_unicode
Unexecuted instantiation: pg_lsn.c:utf8_to_unicode
Unexecuted instantiation: pseudotypes.c:utf8_to_unicode
Unexecuted instantiation: rangetypes.c:utf8_to_unicode
Unexecuted instantiation: regexp.c:utf8_to_unicode
Unexecuted instantiation: regproc.c:utf8_to_unicode
Unexecuted instantiation: rowtypes.c:utf8_to_unicode
Unexecuted instantiation: ruleutils.c:utf8_to_unicode
Unexecuted instantiation: tid.c:utf8_to_unicode
Unexecuted instantiation: timestamp.c:utf8_to_unicode
Unexecuted instantiation: tsquery.c:utf8_to_unicode
Unexecuted instantiation: tsvector.c:utf8_to_unicode
Unexecuted instantiation: tsvector_op.c:utf8_to_unicode
Unexecuted instantiation: tsvector_parser.c:utf8_to_unicode
Unexecuted instantiation: uuid.c:utf8_to_unicode
Unexecuted instantiation: varbit.c:utf8_to_unicode
Unexecuted instantiation: varchar.c:utf8_to_unicode
Unexecuted instantiation: varlena.c:utf8_to_unicode
Unexecuted instantiation: xid.c:utf8_to_unicode
Unexecuted instantiation: xid8funcs.c:utf8_to_unicode
Unexecuted instantiation: xml.c:utf8_to_unicode
Unexecuted instantiation: csvlog.c:utf8_to_unicode
Unexecuted instantiation: elog.c:utf8_to_unicode
Unexecuted instantiation: jsonlog.c:utf8_to_unicode
Unexecuted instantiation: globals.c:utf8_to_unicode
Unexecuted instantiation: miscinit.c:utf8_to_unicode
Unexecuted instantiation: postinit.c:utf8_to_unicode
Unexecuted instantiation: conv.c:utf8_to_unicode
Unexecuted instantiation: mbutils.c:utf8_to_unicode
Unexecuted instantiation: stringinfo_mb.c:utf8_to_unicode
Unexecuted instantiation: wstrcmp.c:utf8_to_unicode
Unexecuted instantiation: wstrncmp.c:utf8_to_unicode
Unexecuted instantiation: guc.c:utf8_to_unicode
Unexecuted instantiation: guc-file.c:utf8_to_unicode
Unexecuted instantiation: guc_tables.c:utf8_to_unicode
Unexecuted instantiation: mcxt.c:utf8_to_unicode
Unexecuted instantiation: encnames.c:utf8_to_unicode
Unexecuted instantiation: jsonapi.c:utf8_to_unicode
Unexecuted instantiation: parse_manifest.c:utf8_to_unicode
Unexecuted instantiation: saslprep.c:utf8_to_unicode
Unexecuted instantiation: unicode_case.c:utf8_to_unicode
Unexecuted instantiation: unicode_category.c:utf8_to_unicode
Unexecuted instantiation: unicode_norm.c:utf8_to_unicode
Unexecuted instantiation: wchar.c:utf8_to_unicode
Unexecuted instantiation: chklocale.c:utf8_to_unicode
Unexecuted instantiation: path.c:utf8_to_unicode
585
586
/*
587
 * Map a Unicode code point to UTF-8.  utf8string must have at least
588
 * unicode_utf8len(c) bytes available.
589
 */
590
static inline unsigned char *
591
unicode_to_utf8(pg_wchar c, unsigned char *utf8string)
592
0
{
593
0
  if (c <= 0x7F)
594
0
  {
595
0
    utf8string[0] = c;
596
0
  }
597
0
  else if (c <= 0x7FF)
598
0
  {
599
0
    utf8string[0] = 0xC0 | ((c >> 6) & 0x1F);
600
0
    utf8string[1] = 0x80 | (c & 0x3F);
601
0
  }
602
0
  else if (c <= 0xFFFF)
603
0
  {
604
0
    utf8string[0] = 0xE0 | ((c >> 12) & 0x0F);
605
0
    utf8string[1] = 0x80 | ((c >> 6) & 0x3F);
606
0
    utf8string[2] = 0x80 | (c & 0x3F);
607
0
  }
608
0
  else
609
0
  {
610
0
    utf8string[0] = 0xF0 | ((c >> 18) & 0x07);
611
0
    utf8string[1] = 0x80 | ((c >> 12) & 0x3F);
612
0
    utf8string[2] = 0x80 | ((c >> 6) & 0x3F);
613
0
    utf8string[3] = 0x80 | (c & 0x3F);
614
0
  }
615
616
0
  return utf8string;
617
0
}
Unexecuted instantiation: json_parser_fuzzer.c:unicode_to_utf8
Unexecuted instantiation: fuzzer_initialize.c:unicode_to_utf8
Unexecuted instantiation: printsimple.c:unicode_to_utf8
Unexecuted instantiation: printtup.c:unicode_to_utf8
Unexecuted instantiation: spgtextproc.c:unicode_to_utf8
Unexecuted instantiation: parallel.c:unicode_to_utf8
Unexecuted instantiation: namespace.c:unicode_to_utf8
Unexecuted instantiation: pg_collation.c:unicode_to_utf8
Unexecuted instantiation: pg_conversion.c:unicode_to_utf8
Unexecuted instantiation: pg_proc.c:unicode_to_utf8
Unexecuted instantiation: pg_type.c:unicode_to_utf8
Unexecuted instantiation: parse_node.c:unicode_to_utf8
Unexecuted instantiation: parser.c:unicode_to_utf8
Unexecuted instantiation: scan.c:unicode_to_utf8
Unexecuted instantiation: scansup.c:unicode_to_utf8
Unexecuted instantiation: async.c:unicode_to_utf8
Unexecuted instantiation: collationcmds.c:unicode_to_utf8
Unexecuted instantiation: conversioncmds.c:unicode_to_utf8
Unexecuted instantiation: copy.c:unicode_to_utf8
Unexecuted instantiation: copyfrom.c:unicode_to_utf8
Unexecuted instantiation: copyfromparse.c:unicode_to_utf8
Unexecuted instantiation: copyto.c:unicode_to_utf8
Unexecuted instantiation: dbcommands.c:unicode_to_utf8
Unexecuted instantiation: explain.c:unicode_to_utf8
Unexecuted instantiation: explain_dr.c:unicode_to_utf8
Unexecuted instantiation: extension.c:unicode_to_utf8
Unexecuted instantiation: indexcmds.c:unicode_to_utf8
Unexecuted instantiation: variable.c:unicode_to_utf8
Unexecuted instantiation: execMain.c:unicode_to_utf8
Unexecuted instantiation: execPartition.c:unicode_to_utf8
Unexecuted instantiation: execUtils.c:unicode_to_utf8
Unexecuted instantiation: auth-oauth.c:unicode_to_utf8
Unexecuted instantiation: auth-sasl.c:unicode_to_utf8
Unexecuted instantiation: auth-scram.c:unicode_to_utf8
Unexecuted instantiation: auth.c:unicode_to_utf8
Unexecuted instantiation: be-secure-common.c:unicode_to_utf8
Unexecuted instantiation: be-secure.c:unicode_to_utf8
Unexecuted instantiation: crypt.c:unicode_to_utf8
Unexecuted instantiation: hba.c:unicode_to_utf8
Unexecuted instantiation: pqcomm.c:unicode_to_utf8
Unexecuted instantiation: pqformat.c:unicode_to_utf8
Unexecuted instantiation: pqmq.c:unicode_to_utf8
Unexecuted instantiation: launch_backend.c:unicode_to_utf8
Unexecuted instantiation: postmaster.c:unicode_to_utf8
Unexecuted instantiation: regcomp.c:unicode_to_utf8
Unexecuted instantiation: regerror.c:unicode_to_utf8
Unexecuted instantiation: regexec.c:unicode_to_utf8
Unexecuted instantiation: regexport.c:unicode_to_utf8
Unexecuted instantiation: regfree.c:unicode_to_utf8
Unexecuted instantiation: regprefix.c:unicode_to_utf8
Unexecuted instantiation: applyparallelworker.c:unicode_to_utf8
Unexecuted instantiation: logicalfuncs.c:unicode_to_utf8
Unexecuted instantiation: proto.c:unicode_to_utf8
Unexecuted instantiation: worker.c:unicode_to_utf8
Unexecuted instantiation: walreceiver.c:unicode_to_utf8
Unexecuted instantiation: walsender.c:unicode_to_utf8
Unexecuted instantiation: backup_manifest.c:unicode_to_utf8
Unexecuted instantiation: basebackup_copy.c:unicode_to_utf8
Unexecuted instantiation: basebackup_incremental.c:unicode_to_utf8
Unexecuted instantiation: backend_startup.c:unicode_to_utf8
Unexecuted instantiation: dest.c:unicode_to_utf8
Unexecuted instantiation: fastpath.c:unicode_to_utf8
Unexecuted instantiation: postgres.c:unicode_to_utf8
Unexecuted instantiation: dict_ispell.c:unicode_to_utf8
Unexecuted instantiation: dict_synonym.c:unicode_to_utf8
Unexecuted instantiation: dict_thesaurus.c:unicode_to_utf8
Unexecuted instantiation: regis.c:unicode_to_utf8
Unexecuted instantiation: spell.c:unicode_to_utf8
Unexecuted instantiation: ts_locale.c:unicode_to_utf8
Unexecuted instantiation: ts_utils.c:unicode_to_utf8
Unexecuted instantiation: wparser_def.c:unicode_to_utf8
Unexecuted instantiation: backend_progress.c:unicode_to_utf8
Unexecuted instantiation: backend_status.c:unicode_to_utf8
Unexecuted instantiation: array_userfuncs.c:unicode_to_utf8
Unexecuted instantiation: arrayfuncs.c:unicode_to_utf8
Unexecuted instantiation: ascii.c:unicode_to_utf8
Unexecuted instantiation: bool.c:unicode_to_utf8
Unexecuted instantiation: cash.c:unicode_to_utf8
Unexecuted instantiation: char.c:unicode_to_utf8
Unexecuted instantiation: date.c:unicode_to_utf8
Unexecuted instantiation: encode.c:unicode_to_utf8
Unexecuted instantiation: enum.c:unicode_to_utf8
Unexecuted instantiation: float.c:unicode_to_utf8
Unexecuted instantiation: format_type.c:unicode_to_utf8
Unexecuted instantiation: formatting.c:unicode_to_utf8
Unexecuted instantiation: genfile.c:unicode_to_utf8
Unexecuted instantiation: geo_ops.c:unicode_to_utf8
Unexecuted instantiation: hbafuncs.c:unicode_to_utf8
Unexecuted instantiation: int.c:unicode_to_utf8
Unexecuted instantiation: int8.c:unicode_to_utf8
Unexecuted instantiation: json.c:unicode_to_utf8
Unexecuted instantiation: jsonb.c:unicode_to_utf8
Unexecuted instantiation: jsonfuncs.c:unicode_to_utf8
Unexecuted instantiation: jsonpath.c:unicode_to_utf8
Unexecuted instantiation: jsonpath_exec.c:unicode_to_utf8
Unexecuted instantiation: jsonpath_gram.c:unicode_to_utf8
Unexecuted instantiation: jsonpath_scan.c:unicode_to_utf8
Unexecuted instantiation: like.c:unicode_to_utf8
Unexecuted instantiation: like_support.c:unicode_to_utf8
Unexecuted instantiation: mac.c:unicode_to_utf8
Unexecuted instantiation: mac8.c:unicode_to_utf8
Unexecuted instantiation: mcxtfuncs.c:unicode_to_utf8
Unexecuted instantiation: multirangetypes.c:unicode_to_utf8
Unexecuted instantiation: name.c:unicode_to_utf8
Unexecuted instantiation: network.c:unicode_to_utf8
Unexecuted instantiation: numeric.c:unicode_to_utf8
Unexecuted instantiation: oid.c:unicode_to_utf8
Unexecuted instantiation: oracle_compat.c:unicode_to_utf8
Unexecuted instantiation: pg_locale.c:unicode_to_utf8
Unexecuted instantiation: pg_locale_builtin.c:unicode_to_utf8
Unexecuted instantiation: pg_locale_icu.c:unicode_to_utf8
Unexecuted instantiation: pg_locale_libc.c:unicode_to_utf8
Unexecuted instantiation: pg_lsn.c:unicode_to_utf8
Unexecuted instantiation: pseudotypes.c:unicode_to_utf8
Unexecuted instantiation: rangetypes.c:unicode_to_utf8
Unexecuted instantiation: regexp.c:unicode_to_utf8
Unexecuted instantiation: regproc.c:unicode_to_utf8
Unexecuted instantiation: rowtypes.c:unicode_to_utf8
Unexecuted instantiation: ruleutils.c:unicode_to_utf8
Unexecuted instantiation: tid.c:unicode_to_utf8
Unexecuted instantiation: timestamp.c:unicode_to_utf8
Unexecuted instantiation: tsquery.c:unicode_to_utf8
Unexecuted instantiation: tsvector.c:unicode_to_utf8
Unexecuted instantiation: tsvector_op.c:unicode_to_utf8
Unexecuted instantiation: tsvector_parser.c:unicode_to_utf8
Unexecuted instantiation: uuid.c:unicode_to_utf8
Unexecuted instantiation: varbit.c:unicode_to_utf8
Unexecuted instantiation: varchar.c:unicode_to_utf8
Unexecuted instantiation: varlena.c:unicode_to_utf8
Unexecuted instantiation: xid.c:unicode_to_utf8
Unexecuted instantiation: xid8funcs.c:unicode_to_utf8
Unexecuted instantiation: xml.c:unicode_to_utf8
Unexecuted instantiation: csvlog.c:unicode_to_utf8
Unexecuted instantiation: elog.c:unicode_to_utf8
Unexecuted instantiation: jsonlog.c:unicode_to_utf8
Unexecuted instantiation: globals.c:unicode_to_utf8
Unexecuted instantiation: miscinit.c:unicode_to_utf8
Unexecuted instantiation: postinit.c:unicode_to_utf8
Unexecuted instantiation: conv.c:unicode_to_utf8
Unexecuted instantiation: mbutils.c:unicode_to_utf8
Unexecuted instantiation: stringinfo_mb.c:unicode_to_utf8
Unexecuted instantiation: wstrcmp.c:unicode_to_utf8
Unexecuted instantiation: wstrncmp.c:unicode_to_utf8
Unexecuted instantiation: guc.c:unicode_to_utf8
Unexecuted instantiation: guc-file.c:unicode_to_utf8
Unexecuted instantiation: guc_tables.c:unicode_to_utf8
Unexecuted instantiation: mcxt.c:unicode_to_utf8
Unexecuted instantiation: encnames.c:unicode_to_utf8
Unexecuted instantiation: jsonapi.c:unicode_to_utf8
Unexecuted instantiation: parse_manifest.c:unicode_to_utf8
Unexecuted instantiation: saslprep.c:unicode_to_utf8
Unexecuted instantiation: unicode_case.c:unicode_to_utf8
Unexecuted instantiation: unicode_category.c:unicode_to_utf8
Unexecuted instantiation: unicode_norm.c:unicode_to_utf8
Unexecuted instantiation: wchar.c:unicode_to_utf8
Unexecuted instantiation: chklocale.c:unicode_to_utf8
Unexecuted instantiation: path.c:unicode_to_utf8
618
619
/*
620
 * Number of bytes needed to represent the given char in UTF8.
621
 */
622
static inline int
623
unicode_utf8len(pg_wchar c)
624
0
{
625
0
  if (c <= 0x7F)
626
0
    return 1;
627
0
  else if (c <= 0x7FF)
628
0
    return 2;
629
0
  else if (c <= 0xFFFF)
630
0
    return 3;
631
0
  else
632
0
    return 4;
633
0
}
Unexecuted instantiation: json_parser_fuzzer.c:unicode_utf8len
Unexecuted instantiation: fuzzer_initialize.c:unicode_utf8len
Unexecuted instantiation: printsimple.c:unicode_utf8len
Unexecuted instantiation: printtup.c:unicode_utf8len
Unexecuted instantiation: spgtextproc.c:unicode_utf8len
Unexecuted instantiation: parallel.c:unicode_utf8len
Unexecuted instantiation: namespace.c:unicode_utf8len
Unexecuted instantiation: pg_collation.c:unicode_utf8len
Unexecuted instantiation: pg_conversion.c:unicode_utf8len
Unexecuted instantiation: pg_proc.c:unicode_utf8len
Unexecuted instantiation: pg_type.c:unicode_utf8len
Unexecuted instantiation: parse_node.c:unicode_utf8len
Unexecuted instantiation: parser.c:unicode_utf8len
Unexecuted instantiation: scan.c:unicode_utf8len
Unexecuted instantiation: scansup.c:unicode_utf8len
Unexecuted instantiation: async.c:unicode_utf8len
Unexecuted instantiation: collationcmds.c:unicode_utf8len
Unexecuted instantiation: conversioncmds.c:unicode_utf8len
Unexecuted instantiation: copy.c:unicode_utf8len
Unexecuted instantiation: copyfrom.c:unicode_utf8len
Unexecuted instantiation: copyfromparse.c:unicode_utf8len
Unexecuted instantiation: copyto.c:unicode_utf8len
Unexecuted instantiation: dbcommands.c:unicode_utf8len
Unexecuted instantiation: explain.c:unicode_utf8len
Unexecuted instantiation: explain_dr.c:unicode_utf8len
Unexecuted instantiation: extension.c:unicode_utf8len
Unexecuted instantiation: indexcmds.c:unicode_utf8len
Unexecuted instantiation: variable.c:unicode_utf8len
Unexecuted instantiation: execMain.c:unicode_utf8len
Unexecuted instantiation: execPartition.c:unicode_utf8len
Unexecuted instantiation: execUtils.c:unicode_utf8len
Unexecuted instantiation: auth-oauth.c:unicode_utf8len
Unexecuted instantiation: auth-sasl.c:unicode_utf8len
Unexecuted instantiation: auth-scram.c:unicode_utf8len
Unexecuted instantiation: auth.c:unicode_utf8len
Unexecuted instantiation: be-secure-common.c:unicode_utf8len
Unexecuted instantiation: be-secure.c:unicode_utf8len
Unexecuted instantiation: crypt.c:unicode_utf8len
Unexecuted instantiation: hba.c:unicode_utf8len
Unexecuted instantiation: pqcomm.c:unicode_utf8len
Unexecuted instantiation: pqformat.c:unicode_utf8len
Unexecuted instantiation: pqmq.c:unicode_utf8len
Unexecuted instantiation: launch_backend.c:unicode_utf8len
Unexecuted instantiation: postmaster.c:unicode_utf8len
Unexecuted instantiation: regcomp.c:unicode_utf8len
Unexecuted instantiation: regerror.c:unicode_utf8len
Unexecuted instantiation: regexec.c:unicode_utf8len
Unexecuted instantiation: regexport.c:unicode_utf8len
Unexecuted instantiation: regfree.c:unicode_utf8len
Unexecuted instantiation: regprefix.c:unicode_utf8len
Unexecuted instantiation: applyparallelworker.c:unicode_utf8len
Unexecuted instantiation: logicalfuncs.c:unicode_utf8len
Unexecuted instantiation: proto.c:unicode_utf8len
Unexecuted instantiation: worker.c:unicode_utf8len
Unexecuted instantiation: walreceiver.c:unicode_utf8len
Unexecuted instantiation: walsender.c:unicode_utf8len
Unexecuted instantiation: backup_manifest.c:unicode_utf8len
Unexecuted instantiation: basebackup_copy.c:unicode_utf8len
Unexecuted instantiation: basebackup_incremental.c:unicode_utf8len
Unexecuted instantiation: backend_startup.c:unicode_utf8len
Unexecuted instantiation: dest.c:unicode_utf8len
Unexecuted instantiation: fastpath.c:unicode_utf8len
Unexecuted instantiation: postgres.c:unicode_utf8len
Unexecuted instantiation: dict_ispell.c:unicode_utf8len
Unexecuted instantiation: dict_synonym.c:unicode_utf8len
Unexecuted instantiation: dict_thesaurus.c:unicode_utf8len
Unexecuted instantiation: regis.c:unicode_utf8len
Unexecuted instantiation: spell.c:unicode_utf8len
Unexecuted instantiation: ts_locale.c:unicode_utf8len
Unexecuted instantiation: ts_utils.c:unicode_utf8len
Unexecuted instantiation: wparser_def.c:unicode_utf8len
Unexecuted instantiation: backend_progress.c:unicode_utf8len
Unexecuted instantiation: backend_status.c:unicode_utf8len
Unexecuted instantiation: array_userfuncs.c:unicode_utf8len
Unexecuted instantiation: arrayfuncs.c:unicode_utf8len
Unexecuted instantiation: ascii.c:unicode_utf8len
Unexecuted instantiation: bool.c:unicode_utf8len
Unexecuted instantiation: cash.c:unicode_utf8len
Unexecuted instantiation: char.c:unicode_utf8len
Unexecuted instantiation: date.c:unicode_utf8len
Unexecuted instantiation: encode.c:unicode_utf8len
Unexecuted instantiation: enum.c:unicode_utf8len
Unexecuted instantiation: float.c:unicode_utf8len
Unexecuted instantiation: format_type.c:unicode_utf8len
Unexecuted instantiation: formatting.c:unicode_utf8len
Unexecuted instantiation: genfile.c:unicode_utf8len
Unexecuted instantiation: geo_ops.c:unicode_utf8len
Unexecuted instantiation: hbafuncs.c:unicode_utf8len
Unexecuted instantiation: int.c:unicode_utf8len
Unexecuted instantiation: int8.c:unicode_utf8len
Unexecuted instantiation: json.c:unicode_utf8len
Unexecuted instantiation: jsonb.c:unicode_utf8len
Unexecuted instantiation: jsonfuncs.c:unicode_utf8len
Unexecuted instantiation: jsonpath.c:unicode_utf8len
Unexecuted instantiation: jsonpath_exec.c:unicode_utf8len
Unexecuted instantiation: jsonpath_gram.c:unicode_utf8len
Unexecuted instantiation: jsonpath_scan.c:unicode_utf8len
Unexecuted instantiation: like.c:unicode_utf8len
Unexecuted instantiation: like_support.c:unicode_utf8len
Unexecuted instantiation: mac.c:unicode_utf8len
Unexecuted instantiation: mac8.c:unicode_utf8len
Unexecuted instantiation: mcxtfuncs.c:unicode_utf8len
Unexecuted instantiation: multirangetypes.c:unicode_utf8len
Unexecuted instantiation: name.c:unicode_utf8len
Unexecuted instantiation: network.c:unicode_utf8len
Unexecuted instantiation: numeric.c:unicode_utf8len
Unexecuted instantiation: oid.c:unicode_utf8len
Unexecuted instantiation: oracle_compat.c:unicode_utf8len
Unexecuted instantiation: pg_locale.c:unicode_utf8len
Unexecuted instantiation: pg_locale_builtin.c:unicode_utf8len
Unexecuted instantiation: pg_locale_icu.c:unicode_utf8len
Unexecuted instantiation: pg_locale_libc.c:unicode_utf8len
Unexecuted instantiation: pg_lsn.c:unicode_utf8len
Unexecuted instantiation: pseudotypes.c:unicode_utf8len
Unexecuted instantiation: rangetypes.c:unicode_utf8len
Unexecuted instantiation: regexp.c:unicode_utf8len
Unexecuted instantiation: regproc.c:unicode_utf8len
Unexecuted instantiation: rowtypes.c:unicode_utf8len
Unexecuted instantiation: ruleutils.c:unicode_utf8len
Unexecuted instantiation: tid.c:unicode_utf8len
Unexecuted instantiation: timestamp.c:unicode_utf8len
Unexecuted instantiation: tsquery.c:unicode_utf8len
Unexecuted instantiation: tsvector.c:unicode_utf8len
Unexecuted instantiation: tsvector_op.c:unicode_utf8len
Unexecuted instantiation: tsvector_parser.c:unicode_utf8len
Unexecuted instantiation: uuid.c:unicode_utf8len
Unexecuted instantiation: varbit.c:unicode_utf8len
Unexecuted instantiation: varchar.c:unicode_utf8len
Unexecuted instantiation: varlena.c:unicode_utf8len
Unexecuted instantiation: xid.c:unicode_utf8len
Unexecuted instantiation: xid8funcs.c:unicode_utf8len
Unexecuted instantiation: xml.c:unicode_utf8len
Unexecuted instantiation: csvlog.c:unicode_utf8len
Unexecuted instantiation: elog.c:unicode_utf8len
Unexecuted instantiation: jsonlog.c:unicode_utf8len
Unexecuted instantiation: globals.c:unicode_utf8len
Unexecuted instantiation: miscinit.c:unicode_utf8len
Unexecuted instantiation: postinit.c:unicode_utf8len
Unexecuted instantiation: conv.c:unicode_utf8len
Unexecuted instantiation: mbutils.c:unicode_utf8len
Unexecuted instantiation: stringinfo_mb.c:unicode_utf8len
Unexecuted instantiation: wstrcmp.c:unicode_utf8len
Unexecuted instantiation: wstrncmp.c:unicode_utf8len
Unexecuted instantiation: guc.c:unicode_utf8len
Unexecuted instantiation: guc-file.c:unicode_utf8len
Unexecuted instantiation: guc_tables.c:unicode_utf8len
Unexecuted instantiation: mcxt.c:unicode_utf8len
Unexecuted instantiation: encnames.c:unicode_utf8len
Unexecuted instantiation: jsonapi.c:unicode_utf8len
Unexecuted instantiation: parse_manifest.c:unicode_utf8len
Unexecuted instantiation: saslprep.c:unicode_utf8len
Unexecuted instantiation: unicode_case.c:unicode_utf8len
Unexecuted instantiation: unicode_category.c:unicode_utf8len
Unexecuted instantiation: unicode_norm.c:unicode_utf8len
Unexecuted instantiation: wchar.c:unicode_utf8len
Unexecuted instantiation: chklocale.c:unicode_utf8len
Unexecuted instantiation: path.c:unicode_utf8len
634
635
/*
636
 * The functions in this list are exported by libpq, and we need to be sure
637
 * that we know which calls are satisfied by libpq and which are satisfied
638
 * by static linkage to libpgcommon.  (This is because we might be using a
639
 * libpq.so that's of a different major version and has encoding IDs that
640
 * differ from the current version's.)  The nominal function names are what
641
 * are actually used in and exported by libpq, while the names exported by
642
 * libpgcommon.a and libpgcommon_srv.a end in "_private".
643
 */
644
#if defined(USE_PRIVATE_ENCODING_FUNCS) || !defined(FRONTEND)
645
0
#define pg_char_to_encoding     pg_char_to_encoding_private
646
0
#define pg_encoding_to_char     pg_encoding_to_char_private
647
0
#define pg_valid_server_encoding  pg_valid_server_encoding_private
648
#define pg_valid_server_encoding_id pg_valid_server_encoding_id_private
649
0
#define pg_utf_mblen        pg_utf_mblen_private
650
#endif
651
652
/*
653
 * These functions are considered part of libpq's exported API and
654
 * are also declared in libpq-fe.h.
655
 */
656
extern int  pg_char_to_encoding(const char *name);
657
extern const char *pg_encoding_to_char(int encoding);
658
extern int  pg_valid_server_encoding_id(int encoding);
659
660
/*
661
 * These functions are available to frontend code that links with libpgcommon
662
 * (in addition to the ones just above).  The constant tables declared
663
 * earlier in this file are also available from libpgcommon.
664
 */
665
extern void pg_encoding_set_invalid(int encoding, char *dst);
666
extern int  pg_encoding_mblen(int encoding, const char *mbstr);
667
extern int  pg_encoding_mblen_or_incomplete(int encoding, const char *mbstr,
668
                      size_t remaining);
669
extern int  pg_encoding_mblen_bounded(int encoding, const char *mbstr);
670
extern int  pg_encoding_dsplen(int encoding, const char *mbstr);
671
extern int  pg_encoding_verifymbchar(int encoding, const char *mbstr, int len);
672
extern int  pg_encoding_verifymbstr(int encoding, const char *mbstr, int len);
673
extern int  pg_encoding_max_length(int encoding);
674
extern int  pg_valid_client_encoding(const char *name);
675
extern int  pg_valid_server_encoding(const char *name);
676
extern bool is_encoding_supported_by_icu(int encoding);
677
extern const char *get_encoding_name_for_icu(int encoding);
678
679
extern unsigned char *unicode_to_utf8(pg_wchar c, unsigned char *utf8string);
680
extern pg_wchar utf8_to_unicode(const unsigned char *c);
681
extern bool pg_utf8_islegal(const unsigned char *source, int length);
682
extern int  pg_utf_mblen(const unsigned char *s);
683
extern int  pg_mule_mblen(const unsigned char *s);
684
685
/*
686
 * The remaining functions are backend-only.
687
 */
688
extern int  pg_mb2wchar(const char *from, pg_wchar *to);
689
extern int  pg_mb2wchar_with_len(const char *from, pg_wchar *to, int len);
690
extern int  pg_encoding_mb2wchar_with_len(int encoding,
691
                      const char *from, pg_wchar *to, int len);
692
extern int  pg_wchar2mb(const pg_wchar *from, char *to);
693
extern int  pg_wchar2mb_with_len(const pg_wchar *from, char *to, int len);
694
extern int  pg_encoding_wchar2mb_with_len(int encoding,
695
                      const pg_wchar *from, char *to, int len);
696
extern int  pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2);
697
extern int  pg_wchar_strncmp(const pg_wchar *s1, const pg_wchar *s2, size_t n);
698
extern int  pg_char_and_wchar_strncmp(const char *s1, const pg_wchar *s2, size_t n);
699
extern size_t pg_wchar_strlen(const pg_wchar *str);
700
extern int  pg_mblen(const char *mbstr);
701
extern int  pg_dsplen(const char *mbstr);
702
extern int  pg_mbstrlen(const char *mbstr);
703
extern int  pg_mbstrlen_with_len(const char *mbstr, int limit);
704
extern int  pg_mbcliplen(const char *mbstr, int len, int limit);
705
extern int  pg_encoding_mbcliplen(int encoding, const char *mbstr,
706
                  int len, int limit);
707
extern int  pg_mbcharcliplen(const char *mbstr, int len, int limit);
708
extern int  pg_database_encoding_max_length(void);
709
extern mbcharacter_incrementer pg_database_encoding_character_incrementer(void);
710
711
extern int  PrepareClientEncoding(int encoding);
712
extern int  SetClientEncoding(int encoding);
713
extern void InitializeClientEncoding(void);
714
extern int  pg_get_client_encoding(void);
715
extern const char *pg_get_client_encoding_name(void);
716
717
extern void SetDatabaseEncoding(int encoding);
718
extern int  GetDatabaseEncoding(void);
719
extern const char *GetDatabaseEncodingName(void);
720
extern void SetMessageEncoding(int encoding);
721
extern int  GetMessageEncoding(void);
722
723
#ifdef ENABLE_NLS
724
extern int  pg_bind_textdomain_codeset(const char *domainname);
725
#endif
726
727
extern unsigned char *pg_do_encoding_conversion(unsigned char *src, int len,
728
                        int src_encoding,
729
                        int dest_encoding);
730
extern int  pg_do_encoding_conversion_buf(Oid proc,
731
                      int src_encoding,
732
                      int dest_encoding,
733
                      unsigned char *src, int srclen,
734
                      unsigned char *dest, int destlen,
735
                      bool noError);
736
737
extern char *pg_client_to_server(const char *s, int len);
738
extern char *pg_server_to_client(const char *s, int len);
739
extern char *pg_any_to_server(const char *s, int len, int encoding);
740
extern char *pg_server_to_any(const char *s, int len, int encoding);
741
742
extern void pg_unicode_to_server(pg_wchar c, unsigned char *s);
743
extern bool pg_unicode_to_server_noerror(pg_wchar c, unsigned char *s);
744
745
extern unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc);
746
extern unsigned short CNStoBIG5(unsigned short cns, unsigned char lc);
747
748
extern int  UtfToLocal(const unsigned char *utf, int len,
749
             unsigned char *iso,
750
             const pg_mb_radix_tree *map,
751
             const pg_utf_to_local_combined *cmap, int cmapsize,
752
             utf_local_conversion_func conv_func,
753
             int encoding, bool noError);
754
extern int  LocalToUtf(const unsigned char *iso, int len,
755
             unsigned char *utf,
756
             const pg_mb_radix_tree *map,
757
             const pg_local_to_utf_combined *cmap, int cmapsize,
758
             utf_local_conversion_func conv_func,
759
             int encoding, bool noError);
760
761
extern bool pg_verifymbstr(const char *mbstr, int len, bool noError);
762
extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len,
763
              bool noError);
764
extern int  pg_verify_mbstr_len(int encoding, const char *mbstr, int len,
765
                bool noError);
766
767
extern void check_encoding_conversion_args(int src_encoding,
768
                       int dest_encoding,
769
                       int len,
770
                       int expected_src_encoding,
771
                       int expected_dest_encoding);
772
773
pg_noreturn extern void report_invalid_encoding(int encoding, const char *mbstr, int len);
774
pg_noreturn extern void report_untranslatable_char(int src_encoding, int dest_encoding,
775
                           const char *mbstr, int len);
776
777
extern int  local2local(const unsigned char *l, unsigned char *p, int len,
778
            int src_encoding, int dest_encoding,
779
            const unsigned char *tab, bool noError);
780
extern int  latin2mic(const unsigned char *l, unsigned char *p, int len,
781
            int lc, int encoding, bool noError);
782
extern int  mic2latin(const unsigned char *mic, unsigned char *p, int len,
783
            int lc, int encoding, bool noError);
784
extern int  latin2mic_with_table(const unsigned char *l, unsigned char *p,
785
                 int len, int lc, int encoding,
786
                 const unsigned char *tab, bool noError);
787
extern int  mic2latin_with_table(const unsigned char *mic, unsigned char *p,
788
                 int len, int lc, int encoding,
789
                 const unsigned char *tab, bool noError);
790
791
#ifdef WIN32
792
extern WCHAR *pgwin32_message_to_UTF16(const char *str, int len, int *utf16len);
793
#endif
794
795
#endif              /* PG_WCHAR_H */