xref: /sqlite-3.40.0/test/badutf.test (revision 4152e677)
1056c8f78Sdrh# 2007 May 15
2056c8f78Sdrh#
3056c8f78Sdrh# The author disclaims copyright to this source code.  In place of
4056c8f78Sdrh# a legal notice, here is a blessing:
5056c8f78Sdrh#
6056c8f78Sdrh#    May you do good and not evil.
7056c8f78Sdrh#    May you find forgiveness for yourself and forgive others.
8056c8f78Sdrh#    May you share freely, never taking more than you give.
9056c8f78Sdrh#
10056c8f78Sdrh#***********************************************************************
11056c8f78Sdrh# This file implements regression tests for SQLite library.
12056c8f78Sdrh#
13056c8f78Sdrh# This file checks to make sure SQLite is able to gracefully
14056c8f78Sdrh# handle malformed UTF-8.
15056c8f78Sdrh#
16*4152e677Sdanielk1977# $Id: badutf.test,v 1.2 2007/09/12 17:01:45 danielk1977 Exp $
17056c8f78Sdrh
18056c8f78Sdrhset testdir [file dirname $argv0]
19056c8f78Sdrhsource $testdir/tester.tcl
20056c8f78Sdrh
21056c8f78Sdrhdo_test badutf-1.1 {
22056c8f78Sdrh  db eval {PRAGMA encoding=UTF8}
23056c8f78Sdrh  sqlite3_exec db {SELECT hex('%80') AS x}
24056c8f78Sdrh} {0 {x 80}}
25056c8f78Sdrhdo_test badutf-1.2 {
26056c8f78Sdrh  sqlite3_exec db {SELECT hex('%81') AS x}
27056c8f78Sdrh} {0 {x 81}}
28056c8f78Sdrhdo_test badutf-1.3 {
29056c8f78Sdrh  sqlite3_exec db {SELECT hex('%bf') AS x}
30056c8f78Sdrh} {0 {x BF}}
31056c8f78Sdrhdo_test badutf-1.4 {
32056c8f78Sdrh  sqlite3_exec db {SELECT hex('%c0') AS x}
33056c8f78Sdrh} {0 {x C0}}
34056c8f78Sdrhdo_test badutf-1.5 {
35056c8f78Sdrh  sqlite3_exec db {SELECT hex('%e0') AS x}
36056c8f78Sdrh} {0 {x E0}}
37056c8f78Sdrhdo_test badutf-1.6 {
38056c8f78Sdrh  sqlite3_exec db {SELECT hex('%f0') AS x}
39056c8f78Sdrh} {0 {x F0}}
40056c8f78Sdrhdo_test badutf-1.7 {
41056c8f78Sdrh  sqlite3_exec db {SELECT hex('%ff') AS x}
42056c8f78Sdrh} {0 {x FF}}
43056c8f78Sdrh
44056c8f78Sdrhsqlite3 db2 {}
45*4152e677Sdanielk1977ifcapable utf16 {
46*4152e677Sdanielk1977  do_test badutf-1.10 {
47056c8f78Sdrh    db2 eval {PRAGMA encoding=UTF16be}
48056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%80') AS x}
49056c8f78Sdrh  } {0 {x 0080}}
50056c8f78Sdrh  do_test badutf-1.11 {
51056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%81') AS x}
52056c8f78Sdrh  } {0 {x 0081}}
53056c8f78Sdrh  do_test badutf-1.12 {
54056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%bf') AS x}
55056c8f78Sdrh  } {0 {x 00BF}}
56056c8f78Sdrh  do_test badutf-1.13 {
57056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%c0') AS x}
58056c8f78Sdrh  } {0 {x FFFD}}
59056c8f78Sdrh  do_test badutf-1.14 {
60056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%c1') AS x}
61056c8f78Sdrh  } {0 {x FFFD}}
62056c8f78Sdrh  do_test badutf-1.15 {
63056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%c0%bf') AS x}
64056c8f78Sdrh  } {0 {x FFFD}}
65056c8f78Sdrh  do_test badutf-1.16 {
66056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%c1%bf') AS x}
67056c8f78Sdrh  } {0 {x FFFD}}
68056c8f78Sdrh  do_test badutf-1.17 {
69056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%c3%bf') AS x}
70056c8f78Sdrh  } {0 {x 00FF}}
71056c8f78Sdrh  do_test badutf-1.18 {
72056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%e0') AS x}
73056c8f78Sdrh  } {0 {x FFFD}}
74056c8f78Sdrh  do_test badutf-1.19 {
75056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%f0') AS x}
76056c8f78Sdrh  } {0 {x FFFD}}
77056c8f78Sdrh  do_test badutf-1.20 {
78056c8f78Sdrh    sqlite3_exec db2 {SELECT hex('%ff') AS x}
79056c8f78Sdrh  } {0 {x FFFD}}
80*4152e677Sdanielk1977}
81056c8f78Sdrh
82056c8f78Sdrh
83*4152e677Sdanielk1977ifcapable bloblit {
84056c8f78Sdrh  do_test badutf-2.1 {
85056c8f78Sdrh    sqlite3_exec db {SELECT '%80'=CAST(x'80' AS text) AS x}
86056c8f78Sdrh  } {0 {x 1}}
87056c8f78Sdrh  do_test badutf-2.2 {
88056c8f78Sdrh    sqlite3_exec db {SELECT CAST('%80' AS blob)=x'80' AS x}
89056c8f78Sdrh  } {0 {x 1}}
90*4152e677Sdanielk1977}
91056c8f78Sdrh
92056c8f78Sdrhdo_test badutf-3.1 {
93056c8f78Sdrh  sqlite3_exec db {SELECT length('%80') AS x}
94056c8f78Sdrh} {0 {x 1}}
95056c8f78Sdrhdo_test badutf-3.2 {
96056c8f78Sdrh  sqlite3_exec db {SELECT length('%61%62%63') AS x}
97056c8f78Sdrh} {0 {x 3}}
98056c8f78Sdrhdo_test badutf-3.3 {
99056c8f78Sdrh  sqlite3_exec db {SELECT length('%7f%80%81') AS x}
100056c8f78Sdrh} {0 {x 3}}
101056c8f78Sdrhdo_test badutf-3.4 {
102056c8f78Sdrh  sqlite3_exec db {SELECT length('%61%c0') AS x}
103056c8f78Sdrh} {0 {x 2}}
104056c8f78Sdrhdo_test badutf-3.5 {
105056c8f78Sdrh  sqlite3_exec db {SELECT length('%61%c0%80%80%80%80%80%80%80%80%80%80') AS x}
106056c8f78Sdrh} {0 {x 2}}
107056c8f78Sdrhdo_test badutf-3.6 {
108056c8f78Sdrh  sqlite3_exec db {SELECT length('%c0%80%80%80%80%80%80%80%80%80%80') AS x}
109056c8f78Sdrh} {0 {x 1}}
110056c8f78Sdrhdo_test badutf-3.7 {
111056c8f78Sdrh  sqlite3_exec db {SELECT length('%80%80%80%80%80%80%80%80%80%80') AS x}
112056c8f78Sdrh} {0 {x 10}}
113056c8f78Sdrhdo_test badutf-3.8 {
114056c8f78Sdrh  sqlite3_exec db {SELECT length('%80%80%80%80%80%f0%80%80%80%80') AS x}
115056c8f78Sdrh} {0 {x 6}}
116056c8f78Sdrhdo_test badutf-3.9 {
117056c8f78Sdrh  sqlite3_exec db {SELECT length('%80%80%80%80%80%f0%80%80%80%ff') AS x}
118056c8f78Sdrh} {0 {x 7}}
119056c8f78Sdrh
120056c8f78Sdrhdo_test badutf-4.1 {
121056c8f78Sdrh  sqlite3_exec db {SELECT hex(trim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x}
122056c8f78Sdrh} {0 {x F0}}
123056c8f78Sdrhdo_test badutf-4.2 {
124056c8f78Sdrh  sqlite3_exec db {SELECT hex(ltrim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x}
125056c8f78Sdrh} {0 {x F0808080FF}}
126056c8f78Sdrhdo_test badutf-4.3 {
127056c8f78Sdrh  sqlite3_exec db {SELECT hex(rtrim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x}
128056c8f78Sdrh} {0 {x 808080F0}}
129056c8f78Sdrhdo_test badutf-4.4 {
130056c8f78Sdrh  sqlite3_exec db {SELECT hex(trim('%80%80%80%f0%80%80%80%ff','%ff%80')) AS x}
131056c8f78Sdrh} {0 {x 808080F0808080FF}}
132056c8f78Sdrhdo_test badutf-4.5 {
133056c8f78Sdrh  sqlite3_exec db {SELECT hex(trim('%ff%80%80%f0%80%80%80%ff','%ff%80')) AS x}
134056c8f78Sdrh} {0 {x 80F0808080FF}}
135056c8f78Sdrhdo_test badutf-4.6 {
136056c8f78Sdrh  sqlite3_exec db {SELECT hex(trim('%ff%80%f0%80%80%80%ff','%ff%80')) AS x}
137056c8f78Sdrh} {0 {x F0808080FF}}
138056c8f78Sdrhdo_test badutf-4.7 {
139056c8f78Sdrh  sqlite3_exec db {SELECT hex(trim('%ff%80%f0%80%80%80%ff','%ff%80%80')) AS x}
140056c8f78Sdrh} {0 {x FF80F0808080FF}}
141056c8f78Sdrh
142056c8f78Sdrhdb2 close
143056c8f78Sdrhfinish_test
144