pgsql: Change the backend to reject strings containing invalidly-encoded

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Change the backend to reject strings containing invalidly-encoded
Date: 2006-05-21 20:05:21
Message-ID: 20060521200521.656E79FA19B@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
Change the backend to reject strings containing invalidly-encoded multibyte
characters in all cases. Formerly we mostly just threw warnings for invalid
input, and failed to detect it at all if no encoding conversion was required.
The tighter check is needed to defend against SQL-injection attacks as per
CVE-2006-2313 (further details will be published after release). Embedded
zero (null) bytes will be rejected as well. The checks are applied during
input to the backend (receipt from client or COPY IN), so it no longer seems
necessary to check in textin() and related routines; any string arriving at
those functions will already have been validated. Conversion failure
reporting (for characters with no equivalent in the destination encoding)
has been cleaned up and made consistent while at it.

Also, fix a few longstanding errors in little-used encoding conversion
routines: win1251_to_iso, win866_to_iso, euc_tw_to_big5, euc_tw_to_mic,
mic_to_euc_tw were all broken to varying extents.

Patches by Tatsuo Ishii and Tom Lane. Thanks to Akio Ishida and Yasuo Ohgaki
for identifying the security issues.

Modified Files:
--------------
pgsql/src/backend/commands:
copy.c (r1.263 -> r1.264)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/copy.c.diff?r1=1.263&r2=1.264)
pgsql/src/backend/utils/adt:
name.c (r1.57 -> r1.58)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/name.c.diff?r1=1.57&r2=1.58)
varchar.c (r1.115 -> r1.116)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/varchar.c.diff?r1=1.115&r2=1.116)
varlena.c (r1.146 -> r1.147)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/varlena.c.diff?r1=1.146&r2=1.147)
pgsql/src/backend/utils/mb:
conv.c (r1.59 -> r1.60)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conv.c.diff?r1=1.59&r2=1.60)
mbutils.c (r1.55 -> r1.56)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/mbutils.c.diff?r1=1.55&r2=1.56)
wchar.c (r1.54 -> r1.55)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/wchar.c.diff?r1=1.54&r2=1.55)
pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic:
cyrillic_and_mic.c (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c.diff?r1=1.12&r2=1.13)
pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic:
euc_cn_and_mic.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis:
euc_jp_and_sjis.c (r1.15 -> r1.16)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c.diff?r1=1.15&r2=1.16)
pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic:
euc_kr_and_mic.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/euc_tw_and_big5:
euc_tw_and_big5.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250:
latin2_and_win1250.c (r1.11 -> r1.12)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c.diff?r1=1.11&r2=1.12)
pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic:
latin_and_mic.c (r1.11 -> r1.12)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c.diff?r1=1.11&r2=1.12)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_ascii:
utf8_and_ascii.c (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c.diff?r1=1.12&r2=1.13)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_big5:
utf8_and_big5.c (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c.diff?r1=1.12&r2=1.13)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic:
utf8_and_cyrillic.c (r1.14 -> r1.15)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c.diff?r1=1.14&r2=1.15)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn:
utf8_and_euc_cn.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp:
utf8_and_euc_jp.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr:
utf8_and_euc_kr.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw:
utf8_and_euc_tw.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gb18030:
utf8_and_gb18030.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gbk:
utf8_and_gbk.c (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c.diff?r1=1.12&r2=1.13)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859:
utf8_and_iso8859.c (r1.18 -> r1.19)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c.diff?r1=1.18&r2=1.19)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1:
utf8_and_iso8859_1.c (r1.15 -> r1.16)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c.diff?r1=1.15&r2=1.16)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_johab:
utf8_and_johab.c (r1.13 -> r1.14)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c.diff?r1=1.13&r2=1.14)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_sjis:
utf8_and_sjis.c (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c.diff?r1=1.12&r2=1.13)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_uhc:
utf8_and_uhc.c (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c.diff?r1=1.12&r2=1.13)
pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win:
utf8_and_win.c (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c.diff?r1=1.2&r2=1.3)
pgsql/src/include/mb:
pg_wchar.h (r1.67 -> r1.68)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/mb/pg_wchar.h.diff?r1=1.67&r2=1.68)
pgsql/src/test/mb/expected:
mule_internal.out (r1.7 -> r1.8)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/mb/expected/mule_internal.out.diff?r1=1.7&r2=1.8)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2006-05-21 20:05:50 pgsql: Change the backend to reject strings containing invalidly-encoded
Previous Message Bruce Momjian 2006-05-21 19:57:40 pgsql: Change \' to '', for SQL standards compliance.