diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index b4c6c23..d755da3 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -53,6 +53,9 @@ pg_lsn_in_internal(const char *str, bool *have_error)
 	off = (uint32) strtoul(str + len1 + 1, NULL, 16);
 	result = ((uint64) id << 32) | off;
 
+	if (XLogRecPtrIsInvalid(result))
+		*have_error = true;
+
 	return result;
 }
 
diff --git a/src/test/regress/expected/pg_lsn.out b/src/test/regress/expected/pg_lsn.out
index 64d41df..d0ef436 100644
--- a/src/test/regress/expected/pg_lsn.out
+++ b/src/test/regress/expected/pg_lsn.out
@@ -4,6 +4,10 @@
 CREATE TABLE PG_LSN_TBL (f1 pg_lsn);
 -- Largest and smallest input
 INSERT INTO PG_LSN_TBL VALUES ('0/0');
+ERROR:  invalid input syntax for type pg_lsn: "0/0"
+LINE 1: INSERT INTO PG_LSN_TBL VALUES ('0/0');
+                                       ^
+INSERT INTO PG_LSN_TBL VALUES ('ABC/DEF');
 INSERT INTO PG_LSN_TBL VALUES ('FFFFFFFF/FFFFFFFF');
 -- Incorrect input
 INSERT INTO PG_LSN_TBL VALUES ('G/0');
@@ -28,9 +32,9 @@ LINE 1: INSERT INTO PG_LSN_TBL VALUES ('/ABCD');
                                        ^
 -- Min/Max aggregation
 SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL;
- min |        max        
------+-------------------
- 0/0 | FFFFFFFF/FFFFFFFF
+   min   |        max        
+---------+-------------------
+ ABC/DEF | FFFFFFFF/FFFFFFFF
 (1 row)
 
 DROP TABLE PG_LSN_TBL;
diff --git a/src/test/regress/sql/pg_lsn.sql b/src/test/regress/sql/pg_lsn.sql
index 2c143c8..391d0b8 100644
--- a/src/test/regress/sql/pg_lsn.sql
+++ b/src/test/regress/sql/pg_lsn.sql
@@ -6,6 +6,7 @@ CREATE TABLE PG_LSN_TBL (f1 pg_lsn);
 
 -- Largest and smallest input
 INSERT INTO PG_LSN_TBL VALUES ('0/0');
+INSERT INTO PG_LSN_TBL VALUES ('ABC/DEF');
 INSERT INTO PG_LSN_TBL VALUES ('FFFFFFFF/FFFFFFFF');
 
 -- Incorrect input
