diff --git a/src/backend/lib/bloomfilter.c b/src/backend/lib/bloomfilter.c
index 73b3768a172..b24c932ab8f 100644
--- a/src/backend/lib/bloomfilter.c
+++ b/src/backend/lib/bloomfilter.c
@@ -91,6 +91,9 @@ bloom_create(int64 total_elems, int bloom_work_mem, uint64 seed)
 	uint64		bitset_bytes;
 	uint64		bitset_bits;

+	if (total_elems <= 0)
+		elog(ERROR, "total number of elements must be greater than zero");
+
 	/*
 	 * Aim for two bytes per element; this is sufficient to get a false
 	 * positive rate below 1%, independent of the size of the bitset or total
@@ -98,7 +101,8 @@ bloom_create(int64 total_elems, int bloom_work_mem, uint64 seed)
 	 * the next lowest power of two turns out to be a significant drop, the
 	 * false positive rate still won't exceed 2% in almost all cases.
 	 */
-	bitset_bytes = Min(bloom_work_mem * UINT64CONST(1024), total_elems * 2);
+	bitset_bytes = Min(bloom_work_mem * UINT64CONST(1024),
+					   (uint64) total_elems * 2);
 	bitset_bytes = Max(1024 * 1024, bitset_bytes);

 	/*
diff --git a/src/test/modules/test_bloomfilter/expected/test_bloomfilter.out b/src/test/modules/test_bloomfilter/expected/test_bloomfilter.out
index 21c068867d6..137eb4f2140 100644
--- a/src/test/modules/test_bloomfilter/expected/test_bloomfilter.out
+++ b/src/test/modules/test_bloomfilter/expected/test_bloomfilter.out
@@ -9,6 +9,12 @@ SELECT test_bloomfilter(power => 23,
  
 (1 row)

+-- A Bloom filter cannot be sized for an empty set.
+SELECT test_bloomfilter(power => 23,
+    nelements => 0,
+    seed => 0,
+    tests => 1);
+ERROR:  total number of elements must be greater than zero
 -- Equivalent "10 bits per element" tests for all possible bitset sizes:
 --
 -- SELECT test_bloomfilter(24, 1677722)
diff --git a/src/test/modules/test_bloomfilter/sql/test_bloomfilter.sql b/src/test/modules/test_bloomfilter/sql/test_bloomfilter.sql
index 9ec159ce404..5a94c95eb2a 100644
--- a/src/test/modules/test_bloomfilter/sql/test_bloomfilter.sql
+++ b/src/test/modules/test_bloomfilter/sql/test_bloomfilter.sql
@@ -6,6 +6,12 @@ SELECT test_bloomfilter(power => 23,
     seed => -1,
     tests => 1);

+-- A Bloom filter cannot be sized for an empty set.
+SELECT test_bloomfilter(power => 23,
+    nelements => 0,
+    seed => 0,
+    tests => 1);
+
 -- Equivalent "10 bits per element" tests for all possible bitset sizes:
 --
 -- SELECT test_bloomfilter(24, 1677722)
