Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> writes:
> + /*
> + * Escape any single quotes or backslashes in locale
> + */
> + static void
> + escape_locale(char **locale)
> + {
> + int len = strlen(*locale),
> + i, j;
> + char *loc_temp = xmalloc(len * 2);
> +
> + for (i = 0, j = 0; i < len; i++)
> + {
> + if ((*locale)[i] == '\'' || (*locale)[i] == '\\')
> + loc_temp[j++] = '\\';
> + loc_temp[j++] = (*locale)[i];
> + }
> + *locale = loc_temp;
> + }
Surely this is quite broken. You need to xmalloc one more byte and
add a '\0'.
regards, tom lane