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