v1-0001-Mark-the-enum-comparison-functions-as-leakproof.patch
text/x-patch
Filename: v1-0001-Mark-the-enum-comparison-functions-as-leakproof.patch
Type: text/x-patch
Part: 0
From e921fd9207a6f877813e4089a654ed7a914fe311 Mon Sep 17 00:00:00 2001
From: Laurenz Albe <laurenz.albe@cybertec.at>
Date: Sun, 10 May 2026 19:30:14 +0200
Subject: [PATCH v1] Mark the enum comparison functions as leakproof
The error messages reachable from enum_cmp_internal() don't
reveal anything about the compared values. Memory allocation
errors from building a cache of the enum values also won't
give away information about the values involved.
Author: Laurenz Albe <laurenz.albe@cybertec.at>
Discussion: https://postgr.es/m/8222d01be22d9d87ba1e7f47e398f4ce81af4aaf.camel%40cybertec.at
---
src/include/catalog/pg_proc.dat | 14 +++++++-------
src/test/regress/expected/opr_sanity.out | 7 +++++++
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index fa9ae79082b..ef7e7b58985 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -9768,25 +9768,25 @@
proname => 'enum_out', provolatile => 's', prorettype => 'cstring',
proargtypes => 'anyenum', prosrc => 'enum_out' },
{ oid => '3508',
- proname => 'enum_eq', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+ proname => 'enum_eq', proleakproof => 't', prorettype => 'bool', proargtypes => 'anyenum anyenum',
prosrc => 'enum_eq' },
{ oid => '3509',
- proname => 'enum_ne', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+ proname => 'enum_ne', proleakproof => 't', prorettype => 'bool', proargtypes => 'anyenum anyenum',
prosrc => 'enum_ne' },
{ oid => '3510',
- proname => 'enum_lt', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+ proname => 'enum_lt', proleakproof => 't', prorettype => 'bool', proargtypes => 'anyenum anyenum',
prosrc => 'enum_lt' },
{ oid => '3511',
- proname => 'enum_gt', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+ proname => 'enum_gt', proleakproof => 't', prorettype => 'bool', proargtypes => 'anyenum anyenum',
prosrc => 'enum_gt' },
{ oid => '3512',
- proname => 'enum_le', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+ proname => 'enum_le', proleakproof => 't', prorettype => 'bool', proargtypes => 'anyenum anyenum',
prosrc => 'enum_le' },
{ oid => '3513',
- proname => 'enum_ge', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+ proname => 'enum_ge', proleakproof => 't', prorettype => 'bool', proargtypes => 'anyenum anyenum',
prosrc => 'enum_ge' },
{ oid => '3514', descr => 'less-equal-greater',
- proname => 'enum_cmp', prorettype => 'int4', proargtypes => 'anyenum anyenum',
+ proname => 'enum_cmp', proleakproof => 't', prorettype => 'int4', proargtypes => 'anyenum anyenum',
prosrc => 'enum_cmp' },
{ oid => '3515', descr => 'hash',
proname => 'hashenum', prorettype => 'int4', proargtypes => 'anyenum',
diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out
index cfdc6b1a17a..0aa48e5de81 100644
--- a/src/test/regress/expected/opr_sanity.out
+++ b/src/test/regress/expected/opr_sanity.out
@@ -855,6 +855,13 @@ sha224(bytea)
sha256(bytea)
sha384(bytea)
sha512(bytea)
+enum_eq(anyenum,anyenum)
+enum_ne(anyenum,anyenum)
+enum_lt(anyenum,anyenum)
+enum_gt(anyenum,anyenum)
+enum_le(anyenum,anyenum)
+enum_ge(anyenum,anyenum)
+enum_cmp(anyenum,anyenum)
starts_with(text,text)
macaddr8_eq(macaddr8,macaddr8)
macaddr8_lt(macaddr8,macaddr8)
--
2.54.0