1# 2007 May 15 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# This file implements regression tests for SQLite library. 12# 13# This file checks to make sure SQLite is able to gracefully 14# handle malformed UTF-8. 15# 16# $Id: badutf.test,v 1.1 2007/05/15 18:35:21 drh Exp $ 17 18set testdir [file dirname $argv0] 19source $testdir/tester.tcl 20 21do_test badutf-1.1 { 22 db eval {PRAGMA encoding=UTF8} 23 sqlite3_exec db {SELECT hex('%80') AS x} 24} {0 {x 80}} 25do_test badutf-1.2 { 26 sqlite3_exec db {SELECT hex('%81') AS x} 27} {0 {x 81}} 28do_test badutf-1.3 { 29 sqlite3_exec db {SELECT hex('%bf') AS x} 30} {0 {x BF}} 31do_test badutf-1.4 { 32 sqlite3_exec db {SELECT hex('%c0') AS x} 33} {0 {x C0}} 34do_test badutf-1.5 { 35 sqlite3_exec db {SELECT hex('%e0') AS x} 36} {0 {x E0}} 37do_test badutf-1.6 { 38 sqlite3_exec db {SELECT hex('%f0') AS x} 39} {0 {x F0}} 40do_test badutf-1.7 { 41 sqlite3_exec db {SELECT hex('%ff') AS x} 42} {0 {x FF}} 43 44do_test badutf-1.10 { 45 sqlite3 db2 {} 46 db2 eval {PRAGMA encoding=UTF16be} 47 sqlite3_exec db2 {SELECT hex('%80') AS x} 48} {0 {x 0080}} 49do_test badutf-1.11 { 50 sqlite3_exec db2 {SELECT hex('%81') AS x} 51} {0 {x 0081}} 52do_test badutf-1.12 { 53 sqlite3_exec db2 {SELECT hex('%bf') AS x} 54} {0 {x 00BF}} 55do_test badutf-1.13 { 56 sqlite3_exec db2 {SELECT hex('%c0') AS x} 57} {0 {x FFFD}} 58do_test badutf-1.14 { 59 sqlite3_exec db2 {SELECT hex('%c1') AS x} 60} {0 {x FFFD}} 61do_test badutf-1.15 { 62 sqlite3_exec db2 {SELECT hex('%c0%bf') AS x} 63} {0 {x FFFD}} 64do_test badutf-1.16 { 65 sqlite3_exec db2 {SELECT hex('%c1%bf') AS x} 66} {0 {x FFFD}} 67do_test badutf-1.17 { 68 sqlite3_exec db2 {SELECT hex('%c3%bf') AS x} 69} {0 {x 00FF}} 70do_test badutf-1.18 { 71 sqlite3_exec db2 {SELECT hex('%e0') AS x} 72} {0 {x FFFD}} 73do_test badutf-1.19 { 74 sqlite3_exec db2 {SELECT hex('%f0') AS x} 75} {0 {x FFFD}} 76do_test badutf-1.20 { 77 sqlite3_exec db2 {SELECT hex('%ff') AS x} 78} {0 {x FFFD}} 79 80 81do_test badutf-2.1 { 82 sqlite3_exec db {SELECT '%80'=CAST(x'80' AS text) AS x} 83} {0 {x 1}} 84do_test badutf-2.2 { 85 sqlite3_exec db {SELECT CAST('%80' AS blob)=x'80' AS x} 86} {0 {x 1}} 87 88do_test badutf-3.1 { 89 sqlite3_exec db {SELECT length('%80') AS x} 90} {0 {x 1}} 91do_test badutf-3.2 { 92 sqlite3_exec db {SELECT length('%61%62%63') AS x} 93} {0 {x 3}} 94do_test badutf-3.3 { 95 sqlite3_exec db {SELECT length('%7f%80%81') AS x} 96} {0 {x 3}} 97do_test badutf-3.4 { 98 sqlite3_exec db {SELECT length('%61%c0') AS x} 99} {0 {x 2}} 100do_test badutf-3.5 { 101 sqlite3_exec db {SELECT length('%61%c0%80%80%80%80%80%80%80%80%80%80') AS x} 102} {0 {x 2}} 103do_test badutf-3.6 { 104 sqlite3_exec db {SELECT length('%c0%80%80%80%80%80%80%80%80%80%80') AS x} 105} {0 {x 1}} 106do_test badutf-3.7 { 107 sqlite3_exec db {SELECT length('%80%80%80%80%80%80%80%80%80%80') AS x} 108} {0 {x 10}} 109do_test badutf-3.8 { 110 sqlite3_exec db {SELECT length('%80%80%80%80%80%f0%80%80%80%80') AS x} 111} {0 {x 6}} 112do_test badutf-3.9 { 113 sqlite3_exec db {SELECT length('%80%80%80%80%80%f0%80%80%80%ff') AS x} 114} {0 {x 7}} 115 116do_test badutf-4.1 { 117 sqlite3_exec db {SELECT hex(trim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x} 118} {0 {x F0}} 119do_test badutf-4.2 { 120 sqlite3_exec db {SELECT hex(ltrim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x} 121} {0 {x F0808080FF}} 122do_test badutf-4.3 { 123 sqlite3_exec db {SELECT hex(rtrim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x} 124} {0 {x 808080F0}} 125do_test badutf-4.4 { 126 sqlite3_exec db {SELECT hex(trim('%80%80%80%f0%80%80%80%ff','%ff%80')) AS x} 127} {0 {x 808080F0808080FF}} 128do_test badutf-4.5 { 129 sqlite3_exec db {SELECT hex(trim('%ff%80%80%f0%80%80%80%ff','%ff%80')) AS x} 130} {0 {x 80F0808080FF}} 131do_test badutf-4.6 { 132 sqlite3_exec db {SELECT hex(trim('%ff%80%f0%80%80%80%ff','%ff%80')) AS x} 133} {0 {x F0808080FF}} 134do_test badutf-4.7 { 135 sqlite3_exec db {SELECT hex(trim('%ff%80%f0%80%80%80%ff','%ff%80%80')) AS x} 136} {0 {x FF80F0808080FF}} 137 138db2 close 139finish_test 140