postgresql/src/common
Thomas Munro df0852fe03 Fix encoding length for EUC_CN.
While EUC_CN supports only 1- and 2-byte sequences (CS0, CS1), the
mb<->wchar conversion functions allow 3-byte sequences beginning SS2,
SS3.

Change pg_encoding_max_length() to return 3, not 2, to close a
hypothesized buffer overrun if a corrupted string is converted to wchar
and back again in a newly allocated buffer.  We might reconsider that in
master (ie harmonizing in a different direction), but this change seems
better for the back-branches.

Also change pg_euccn_mblen() to report SS2 and SS3 characters as having
length 3 (following the example of EUC_KR).  Even though such characters
would not pass verification, it's remotely possible that invalid bytes
could be used to compute a buffer size for use in wchar conversion.

Security: CVE-2026-2006
Backpatch-through: 14
Author: Thomas Munro <thomas.munro@gmail.com>
Reviewed-by: Noah Misch <noah@leadboat.com>
Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
2026-02-09 12:12:29 +13:00
..
unicode Fix INITCAP() word boundaries for PG_UNICODE_FAST. 2025-04-21 12:34:58 -07:00
.gitignore Replace the data structure used for keyword lookup. 2019-01-06 17:02:57 -05:00
archive.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
base64.c Use 'void *' for arbitrary buffers, 'uint8 *' for byte arrays 2025-05-08 22:01:25 +03:00
binaryheap.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
blkreftable.c Revert workarounds for -Wmissing-braces false positives on old GCC 2025-03-20 11:25:58 +01:00
checksum_helper.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
compression.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
config_info.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
controldata_utils.c Use XLOG_CONTROL_FILE macro consistently for control file name. 2025-04-07 09:27:33 +09:00
cryptohash.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
cryptohash_openssl.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
d2s.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
d2s_full_table.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
d2s_intrinsics.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
digit_table.h Change floating-point output format for improved performance. 2019-02-13 15:20:33 +00:00
encnames.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
exec.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
f2s.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
fe_memutils.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
file_perm.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
file_utils.c pg_upgrade: Add --swap for faster file transfer. 2025-03-25 16:02:35 -05:00
hashfn.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
hmac.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
hmac_openssl.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
ip.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
jsonapi.c With GB18030, prevent SIGSEGV from reading past end of allocation. 2025-05-05 04:52:04 -07:00
keywords.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
kwlookup.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
link-canary.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
logging.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
Makefile Don't put library-supplied -L/-I switches before user-supplied ones. 2025-07-29 15:17:40 -04:00
md5.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
md5_common.c Use 'void *' for arbitrary buffers, 'uint8 *' for byte arrays 2025-05-08 22:01:25 +03:00
md5_int.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
meson.build Update copyright for 2025 2025-01-01 11:21:55 -05:00
parse_manifest.c pg_noreturn to replace pg_attribute_noreturn() 2025-03-13 12:37:26 +01:00
percentrepl.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
pg_get_line.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
pg_lzcompress.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
pg_prng.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
pgfnames.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
psprintf.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
relpath.c Change relpath() et al to return path by value 2025-02-25 09:02:07 -05:00
restricted_token.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
rmtree.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
ryu_common.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
saslprep.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
scram-common.c Use 'void *' for arbitrary buffers, 'uint8 *' for byte arrays 2025-05-08 22:01:25 +03:00
sha1.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
sha1_int.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
sha2.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
sha2_int.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
sprompt.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
string.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
stringinfo.c Fix a compiler warning in initStringInfo(). 2025-01-11 15:52:37 +09:00
unicode_case.c Harmonize function parameter names for Postgres 18. 2025-04-12 12:07:36 -04:00
unicode_category.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
unicode_norm.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
username.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
wait_error.c Update copyright for 2025 2025-01-01 11:21:55 -05:00
wchar.c Fix encoding length for EUC_CN. 2026-02-09 12:12:29 +13:00