mirror of
https://github.com/postgres/postgres.git
synced 2026-02-20 00:10:16 -05: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
1e7fe06c10.
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:
parent
c66f4cff1a
commit
45eb47230d
1 changed files with 8 additions and 6 deletions
|
|
@ -1085,15 +1085,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;
|
||||
}
|
||||
|
||||
|
|
@ -1108,15 +1109,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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue