Index: print.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/bin/psql/print.c,v retrieving revision 1.74 diff -c -r1.74 print.c *** print.c 24 Sep 2005 17:53:27 -0000 1.74 --- print.c 25 Sep 2005 09:16:01 -0000 *************** *** 697,714 **** else fputs(" ", fout); { char *my_cell = pg_local_malloc(cell_w[i] + 1); strcpy(my_cell, *ptr); ! if (opt_align[i % col_count] == 'r' && opt_numeric_locale) ! format_numeric_locale(my_cell); if (opt_border < 2) fprintf(fout, "%s\n", my_cell); else fprintf(fout, "%-s%*s |\n", my_cell, dwidth - cell_w[i], ""); free(my_cell); } } if (opt_border == 2) --- 697,726 ---- else fputs(" ", fout); + /* We seperate the cases for numeric_locale because for UTF-8 (and + * other) encodings, cell_w <= strlen(*ptr). We can't just use + * strlen() in the malloc because there needs to be enough room for + * format_numeric_locale() to store its result. */ + + if (opt_align[i % col_count] == 'r' && opt_numeric_locale) { char *my_cell = pg_local_malloc(cell_w[i] + 1); strcpy(my_cell, *ptr); ! format_numeric_locale(my_cell); if (opt_border < 2) fprintf(fout, "%s\n", my_cell); else fprintf(fout, "%-s%*s |\n", my_cell, dwidth - cell_w[i], ""); free(my_cell); } + else + { + if (opt_border < 2) + fprintf(fout, "%s\n", *ptr); + else + fprintf(fout, "%-s%*s |\n", *ptr, dwidth - cell_w[i], ""); + } } if (opt_border == 2)