From 6c0d4aabe2fd36e2e808c2d453fcabbe6c8464fa Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 12 Feb 2006 03:30:21 +0000
Subject: [PATCH] Fix more fallout from line-wrap patch, to wit, arbitrarily
 changing the API of PQdsplen without bothering to fix its callers.  Although
 ReportSyntaxErrorPosition could probably do with more smarts about handling
 control characters, for the moment I'll just get it back to handling tabs
 consistently.

---
 src/bin/psql/common.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 8146cd22cbd..8f6d03561ae 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2005, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.111 2005/11/22 18:17:29 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.112 2006/02/12 03:30:21 tgl Exp $
  */
 #include "postgres_fe.h"
 #include "common.h"
@@ -444,6 +444,7 @@ ReportSyntaxErrorPosition(const PGresult *result, const char *query)
 	int			clen,
 				slen,
 				i,
+				w,
 			   *qidx,
 			   *scridx,
 				qoffset,
@@ -503,7 +504,11 @@ ReportSyntaxErrorPosition(const PGresult *result, const char *query)
 	{
 		qidx[i] = qoffset;
 		scridx[i] = scroffset;
-		scroffset += PQdsplen(&query[qoffset], pset.encoding);
+		w = PQdsplen(&query[qoffset], pset.encoding);
+		/* treat control chars as width 1; see tab hack below */
+		if (w <= 0)
+			w = 1;
+		scroffset += w;
 		qoffset += PQmblen(&query[qoffset], pset.encoding);
 	}
 	qidx[i] = qoffset;
@@ -618,7 +623,12 @@ ReportSyntaxErrorPosition(const PGresult *result, const char *query)
 		 */
 		scroffset = 0;
 		for (i = 0; i < msg.len; i += PQmblen(&msg.data[i], pset.encoding))
-			scroffset += PQdsplen(&msg.data[i], pset.encoding);
+		{
+			w = PQdsplen(&msg.data[i], pset.encoding);
+			if (w <= 0)
+				w = 1;
+			scroffset += w;
+		}
 
 		/* Finish and emit the message. */
 		appendPQExpBufferStr(&msg, &wquery[qidx[ibeg]]);
-- 
GitLab