1
0

badutf.test 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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.2 2007/09/12 17:01:45 danielk1977 Exp $
  17. set testdir [file dirname $argv0]
  18. source $testdir/tester.tcl
  19. do_test badutf-1.1 {
  20. db eval {PRAGMA encoding=UTF8}
  21. sqlite3_exec db {SELECT hex('%80') AS x}
  22. } {0 {x 80}}
  23. do_test badutf-1.2 {
  24. sqlite3_exec db {SELECT hex('%81') AS x}
  25. } {0 {x 81}}
  26. do_test badutf-1.3 {
  27. sqlite3_exec db {SELECT hex('%bf') AS x}
  28. } {0 {x BF}}
  29. do_test badutf-1.4 {
  30. sqlite3_exec db {SELECT hex('%c0') AS x}
  31. } {0 {x C0}}
  32. do_test badutf-1.5 {
  33. sqlite3_exec db {SELECT hex('%e0') AS x}
  34. } {0 {x E0}}
  35. do_test badutf-1.6 {
  36. sqlite3_exec db {SELECT hex('%f0') AS x}
  37. } {0 {x F0}}
  38. do_test badutf-1.7 {
  39. sqlite3_exec db {SELECT hex('%ff') AS x}
  40. } {0 {x FF}}
  41. sqlite3 db2 {}
  42. ifcapable utf16 {
  43. do_test badutf-1.10 {
  44. db2 eval {PRAGMA encoding=UTF16be}
  45. sqlite3_exec db2 {SELECT hex('%80') AS x}
  46. } {0 {x 0080}}
  47. do_test badutf-1.11 {
  48. sqlite3_exec db2 {SELECT hex('%81') AS x}
  49. } {0 {x 0081}}
  50. do_test badutf-1.12 {
  51. sqlite3_exec db2 {SELECT hex('%bf') AS x}
  52. } {0 {x 00BF}}
  53. do_test badutf-1.13 {
  54. sqlite3_exec db2 {SELECT hex('%c0') AS x}
  55. } {0 {x FFFD}}
  56. do_test badutf-1.14 {
  57. sqlite3_exec db2 {SELECT hex('%c1') AS x}
  58. } {0 {x FFFD}}
  59. do_test badutf-1.15 {
  60. sqlite3_exec db2 {SELECT hex('%c0%bf') AS x}
  61. } {0 {x FFFD}}
  62. do_test badutf-1.16 {
  63. sqlite3_exec db2 {SELECT hex('%c1%bf') AS x}
  64. } {0 {x FFFD}}
  65. do_test badutf-1.17 {
  66. sqlite3_exec db2 {SELECT hex('%c3%bf') AS x}
  67. } {0 {x 00FF}}
  68. do_test badutf-1.18 {
  69. sqlite3_exec db2 {SELECT hex('%e0') AS x}
  70. } {0 {x FFFD}}
  71. do_test badutf-1.19 {
  72. sqlite3_exec db2 {SELECT hex('%f0') AS x}
  73. } {0 {x FFFD}}
  74. do_test badutf-1.20 {
  75. sqlite3_exec db2 {SELECT hex('%ff') AS x}
  76. } {0 {x FFFD}}
  77. }
  78. ifcapable bloblit {
  79. do_test badutf-2.1 {
  80. sqlite3_exec db {SELECT '%80'=CAST(x'80' AS text) AS x}
  81. } {0 {x 1}}
  82. do_test badutf-2.2 {
  83. sqlite3_exec db {SELECT CAST('%80' AS blob)=x'80' AS x}
  84. } {0 {x 1}}
  85. }
  86. do_test badutf-3.1 {
  87. sqlite3_exec db {SELECT length('%80') AS x}
  88. } {0 {x 1}}
  89. do_test badutf-3.2 {
  90. sqlite3_exec db {SELECT length('%61%62%63') AS x}
  91. } {0 {x 3}}
  92. do_test badutf-3.3 {
  93. sqlite3_exec db {SELECT length('%7f%80%81') AS x}
  94. } {0 {x 3}}
  95. do_test badutf-3.4 {
  96. sqlite3_exec db {SELECT length('%61%c0') AS x}
  97. } {0 {x 2}}
  98. do_test badutf-3.5 {
  99. sqlite3_exec db {SELECT length('%61%c0%80%80%80%80%80%80%80%80%80%80') AS x}
  100. } {0 {x 2}}
  101. do_test badutf-3.6 {
  102. sqlite3_exec db {SELECT length('%c0%80%80%80%80%80%80%80%80%80%80') AS x}
  103. } {0 {x 1}}
  104. do_test badutf-3.7 {
  105. sqlite3_exec db {SELECT length('%80%80%80%80%80%80%80%80%80%80') AS x}
  106. } {0 {x 10}}
  107. do_test badutf-3.8 {
  108. sqlite3_exec db {SELECT length('%80%80%80%80%80%f0%80%80%80%80') AS x}
  109. } {0 {x 6}}
  110. do_test badutf-3.9 {
  111. sqlite3_exec db {SELECT length('%80%80%80%80%80%f0%80%80%80%ff') AS x}
  112. } {0 {x 7}}
  113. do_test badutf-4.1 {
  114. sqlite3_exec db {SELECT hex(trim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x}
  115. } {0 {x F0}}
  116. do_test badutf-4.2 {
  117. sqlite3_exec db {SELECT hex(ltrim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x}
  118. } {0 {x F0808080FF}}
  119. do_test badutf-4.3 {
  120. sqlite3_exec db {SELECT hex(rtrim('%80%80%80%f0%80%80%80%ff','%80%ff')) AS x}
  121. } {0 {x 808080F0}}
  122. do_test badutf-4.4 {
  123. sqlite3_exec db {SELECT hex(trim('%80%80%80%f0%80%80%80%ff','%ff%80')) AS x}
  124. } {0 {x 808080F0808080FF}}
  125. do_test badutf-4.5 {
  126. sqlite3_exec db {SELECT hex(trim('%ff%80%80%f0%80%80%80%ff','%ff%80')) AS x}
  127. } {0 {x 80F0808080FF}}
  128. do_test badutf-4.6 {
  129. sqlite3_exec db {SELECT hex(trim('%ff%80%f0%80%80%80%ff','%ff%80')) AS x}
  130. } {0 {x F0808080FF}}
  131. do_test badutf-4.7 {
  132. sqlite3_exec db {SELECT hex(trim('%ff%80%f0%80%80%80%ff','%ff%80%80')) AS x}
  133. } {0 {x FF80F0808080FF}}
  134. db2 close
  135. finish_test