aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/varbit.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c
index e0a67d340ef..e89e2bf323d 100644
--- a/src/backend/utils/adt/varbit.c
+++ b/src/backend/utils/adt/varbit.c
@@ -9,7 +9,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/varbit.c,v 1.50 2006/07/14 14:52:24 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/varbit.c,v 1.50.2.1 2007/08/21 02:40:12 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -468,8 +468,9 @@ varbit_out(PG_FUNCTION_ARGS)
result = (char *) palloc(len + 1);
sp = VARBITS(s);
r = result;
- for (i = 0; i < len - BITS_PER_BYTE; i += BITS_PER_BYTE, sp++)
+ for (i = 0; i <= len - BITS_PER_BYTE; i += BITS_PER_BYTE, sp++)
{
+ /* print full bytes */
x = *sp;
for (k = 0; k < BITS_PER_BYTE; k++)
{
@@ -477,11 +478,15 @@ varbit_out(PG_FUNCTION_ARGS)
x <<= 1;
}
}
- x = *sp;
- for (k = i; k < len; k++)
+ if (i < len)
{
- *r++ = IS_HIGHBIT_SET(x) ? '1' : '0';
- x <<= 1;
+ /* print the last partial byte */
+ x = *sp;
+ for (k = i; k < len; k++)
+ {
+ *r++ = IS_HIGHBIT_SET(x) ? '1' : '0';
+ x <<= 1;
+ }
}
*r = '\0';