mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-23 06:47:14 +08:00
pg_mblen_range, pg_mblen_with_len: Valgrind after encoding ereport.
The prior order caused spurious Valgrind errors. They're spurious because the ereport(ERROR) non-local exit discards the pointer in question. pg_mblen_cstr() ordered the checks correctly, but these other two did not. Back-patch to v14, like commit 1e7fe06c10c0a8da9dd6261a6be8d405dc17c728. Reviewed-by: Thomas Munro <thomas.munro@gmail.com> Discussion: https://postgr.es/m/20260214053821.fa.noahmisch@microsoft.com Backpatch-through: 14
This commit is contained in:
@ -1084,15 +1084,16 @@ pg_mblen_range(const char *mbstr, const char *end)
|
||||
int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr);
|
||||
|
||||
Assert(end > mbstr);
|
||||
|
||||
if (unlikely(mbstr + length > end))
|
||||
report_invalid_encoding_db(mbstr, length, end - mbstr);
|
||||
|
||||
#ifdef VALGRIND_EXPENSIVE
|
||||
VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, end - mbstr);
|
||||
#else
|
||||
VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, length);
|
||||
#endif
|
||||
|
||||
if (unlikely(mbstr + length > end))
|
||||
report_invalid_encoding_db(mbstr, length, end - mbstr);
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
@ -1107,15 +1108,16 @@ pg_mblen_with_len(const char *mbstr, int limit)
|
||||
int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr);
|
||||
|
||||
Assert(limit >= 1);
|
||||
|
||||
if (unlikely(length > limit))
|
||||
report_invalid_encoding_db(mbstr, length, limit);
|
||||
|
||||
#ifdef VALGRIND_EXPENSIVE
|
||||
VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, limit);
|
||||
#else
|
||||
VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, length);
|
||||
#endif
|
||||
|
||||
if (unlikely(length > limit))
|
||||
report_invalid_encoding_db(mbstr, length, limit);
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user