From 5b92d004fa8226ea52b696e647d0867d5bb1f076 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Mon, 15 Apr 2002 23:35:51 +0000
Subject: [PATCH] Fix for NOTIFY when NAMEDATALEN is nonstandard in server. 
 Fix idea from Tom Lane to move string storage to end of structure but keep
 pointer in the same location.

---
 src/interfaces/libpq/fe-exec.c  | 14 +++++++++++---
 src/interfaces/libpq/libpq-fe.h |  5 ++---
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 0633663c890..88fc1a9f00d 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.118 2002/04/08 03:48:10 ishii Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.119 2002/04/15 23:35:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1510,8 +1510,16 @@ getNotify(PGconn *conn)
 		return EOF;
 	if (pqGets(&conn->workBuffer, conn))
 		return EOF;
-	newNotify = (PGnotify *) malloc(sizeof(PGnotify));
-	strncpy(newNotify->relname, conn->workBuffer.data, NAMEDATALEN);
+
+	/*
+	 * Store the relation name right after the PQnotify structure so it can
+	 * all be freed at once.  We don't use NAMEDATALEN because we don't
+	 * want to tie this interface to a specific server name length.
+	 */
+	newNotify = (PGnotify *) malloc(sizeof(PGnotify) +
+				strlen(conn->workBuffer.data) + 1);
+	newNotify->relname = (char *)newNotify + sizeof(PGnotify);
+	strcpy(newNotify->relname, conn->workBuffer.data);
 	newNotify->be_pid = be_pid;
 	DLAddTail(conn->notifyList, DLNewElem(newNotify));
 	return 0;
diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h
index b034b3992a1..7f77f8aec4f 100644
--- a/src/interfaces/libpq/libpq-fe.h
+++ b/src/interfaces/libpq/libpq-fe.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: libpq-fe.h,v 1.83 2002/03/05 06:07:26 momjian Exp $
+ * $Id: libpq-fe.h,v 1.84 2002/04/15 23:35:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -105,8 +105,7 @@ typedef struct pg_result PGresult;
  */
 typedef struct pgNotify
 {
-	char		relname[NAMEDATALEN];	/* name of relation containing
-										 * data */
+	char		*relname;		/* name of relation containing data */
 	int			be_pid;			/* process id of backend */
 } PGnotify;
 
-- 
GitLab