]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the sha1() extension function so that it interprets zero-length
authordrh <>
Wed, 29 Jul 2026 10:28:44 +0000 (10:28 +0000)
committerdrh <>
Wed, 29 Jul 2026 10:28:44 +0000 (10:28 +0000)
BLOBs as BLOBs and not as NULL.  Also add a few test cases for that
extension function, which was previously completely untested.
[bugs:/info/2026-07-29T06:31:41Z|Bug 2026-07-29T06:31:41Z].

FossilOrigin-Name: 978d12de384fef985d0363633566304bb20f452dfe8ceb836ca1d353a135f30a

ext/misc/sha1.c
manifest
manifest.uuid
test/sha1.sql [new file with mode: 0644]
test/shellB.test

index 0ec5b772e5fd5dbcef16b46768ddb809ece8175d..b70ace9fa1480b43b1892325cdd74190fb63d8f5 100644 (file)
@@ -267,7 +267,10 @@ static void sha1Func(
   }else{
     pData = (const unsigned char*)sqlite3_value_text(argv[0]);
   }
-  if( pData==0 ) return;
+  if( pData==0 ){
+    if( nByte ) return;
+    pData = (const unsigned char*)"";
+  }
   hash_step(&cx, pData, nByte);
   if( sqlite3_user_data(context)!=0 ){
     /* sha1b() - binary result */
index 6266b436061d37f3e7cc5fc8247efcac3c4c010d..93996c4ee0dc7c3ebe039966675a87ca904fab35 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Further\sfixes\sfor\srunning\s[make\sdevtest]\swith\sFil-C.
-D 2026-07-28T14:16:52.727
+C Fix\sthe\ssha1()\sextension\sfunction\sso\sthat\sit\sinterprets\szero-length\nBLOBs\sas\sBLOBs\sand\snot\sas\sNULL.\s\sAlso\sadd\sa\sfew\stest\scases\sfor\sthat\nextension\sfunction,\swhich\swas\spreviously\scompletely\suntested.\n[bugs:/info/2026-07-29T06:31:41Z|Bug\s2026-07-29T06:31:41Z].
+D 2026-07-29T10:28:44.733
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -397,7 +397,7 @@ F ext/misc/regexp.c 378e6e84516952a4b9f3f4df88927f20e6538e2609f55b773ed78899dab8
 F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c
 F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c
 F ext/misc/series.c fd82b5c14849b861a299a316b0c63bfd69f7249601ee9bcc6fda2317fec0f821
-F ext/misc/sha1.c eed0ad67ad7c69798278183a74523d95623d4864821a3f4dd82b234568e307c1
+F ext/misc/sha1.c fe474ba3e4f9d8915cf58bc0a9e4c00a565a6523942136da56b01909e2ce0493
 F ext/misc/shathree.c fd22d70620f86a0467acfdd3acd8435d5cb54eb1e2d9ff36ae44e389826993df
 F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52
 F ext/misc/spellfix.c 9099bd2d8701d820904663242e470537e919826060042288e6bfafd3e406c9b4
@@ -1625,6 +1625,7 @@ F test/selectH.test 0b54599f1917d99568c9b929df22ec6261ed7b6d2f02a46b5945ef81b787
 F test/session.test 78fa2365e93d3663a6e933f86e7afc395adf18be
 F test/sessionfuzz-data1.db 1f8d5def831f19b1c74571037f0d53a588ea49a6c4ca2a028fc0c27ef896dbcb
 F test/sessionfuzz.c 0ec813258fbfd222c62ba6867c6a5a015f098fcaa6d89e7e0ee623ea91145cf0
+F test/sha1.sql 5a4057dee1434144013567c8aecd2f996ec659398f04c61c0891ed1a3a8e20ac
 F test/shared.test 50bd8091735b272732125928c363476a17b5fb264835de7d19e90c72055c888b
 F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
 F test/shared3.test cb92d083003ddf0f313166e494ec2fcafa55fdebf648628923ded3169dba8850
@@ -1648,7 +1649,7 @@ F test/shell7.test 6b006d296b569a7ec78b8168af77578b3bde8f58b79c32d9f46cff1eaf763
 F test/shell8.test 38c9e4d7e85d2a3ecfacaa9f6cda4f7a81bf4fffb5f3f37f9cd76827c6883192
 F test/shell9.test c0e8871061a92151450b3332279a893b516fa73a6c46d4f51a0998407cbf8c89
 F test/shellA.test 05cdaafa1f79913654487ce3aefa038d4106245d58f52e02faf506140a76d480
-F test/shellB.test 132ece4f4c50ca0af53dfc70ff5ebfb4d5ee98cd436db1bd4aae22a367877391
+F test/shellB.test 592748d685ccf4986fcd2b464098ea244b3b4c03d5400ee097e6698f14ed9a67
 F test/shmlock.test 9f1f729a7fe2c46c88b156af819ac9b72c0714ac6f7246638a73c5752b5fd13c
 F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
 F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
@@ -2217,8 +2218,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 86bc7c8648fa6df303cd6953e377227d8a778b7becca984332bb6f623cb52cec
-R 4db5ee716be273ed42e2597013e3a376
-U dan
-Z 5fd40feb490512285b8dddf6c53153cd
+P 1ed5e5bed26e3d38dd09541ce73dc68188574e236ecb60142260a0c40bf8902a
+R 6ce74aef2f51db9d2c3ebc6d22322ce0
+U drh
+Z af18f06a2c863de02c94ce6afa93abdc
 # Remove this line to create a well-formed Fossil manifest.
index 8a9b0a6aba2d44fe2994f1689d9582ed4f46e66b..6ed5966ae94dc76d05d7b6678d9a1ad56308a828 100644 (file)
@@ -1 +1 @@
-1ed5e5bed26e3d38dd09541ce73dc68188574e236ecb60142260a0c40bf8902a
+978d12de384fef985d0363633566304bb20f452dfe8ceb836ca1d353a135f30a
diff --git a/test/sha1.sql b/test/sha1.sql
new file mode 100644 (file)
index 0000000..adc3fe2
--- /dev/null
@@ -0,0 +1,34 @@
+#!sqlite3
+#
+# 2026-07-29
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# Test cases for the sha1(), sha1b() functions.
+#
+.mode list -reset
+.testcase 100
+SELECT sha1('this is a test');
+.check fa26be19de6bff93f70bc2308434e4a440bbad02
+.testcase 110
+SELECT hex(sha1b('this is a test'));
+.check FA26BE19DE6BFF93F70BC2308434E4A440BBAD02
+.testcase 120
+SELECT sha1(x'31323334353637383930');
+.check 01b307acba4f54f55aafc33bb06bbbf6ca803e9a
+.testcase 130
+SELECT sha1(12345*100000 + 67890);
+.check 01b307acba4f54f55aafc33bb06bbbf6ca803e9a
+.testcase 140
+SELECT sha1('');
+.check da39a3ee5e6b4b0d3255bfef95601890afd80709
+.testcase 150
+SELECT sha1(x'');
+.check da39a3ee5e6b4b0d3255bfef95601890afd80709
index 3df4a074a86c534f122624f4195dce236c568aab..4725dc1ce4726f1985ed9fb70becb7e2a956edf7 100644 (file)
@@ -43,6 +43,7 @@ do_clitest dblwidth-a.sql
 do_clitest vt100-a.sql
 do_clitest regexp1.sql
 do_clitest imposter1.sql
+do_clitest sha1.sql
 ifcapable vtab {
   do_clitest dotcmd01.sql
   do_clitest import01.sql