]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1778: sha256() treats empty blob and null blob differently v9.1.1778
authorzeertzjq <zeertzjq@outlook.com>
Sat, 20 Sep 2025 14:37:40 +0000 (14:37 +0000)
committerChristian Brabandt <cb@256bit.org>
Sat, 20 Sep 2025 14:37:40 +0000 (14:37 +0000)
Problem:  sha256() treats empty blob and null blob differently
          (after 9.1.1774).
Solution: Handle null blob the same as empty blob (zeertzjq).

closes: #18341

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/evalfunc.c
src/testdir/test_sha256.vim
src/version.c

index a1076f07dc5e978556fbb06524b2113425796b6c..34e3291abb0c4c1f3b792a83eae571b87acfe017 100644 (file)
@@ -11760,12 +11760,9 @@ f_sha256(typval_T *argvars, typval_T *rettv)
     if (argvars[0].v_type == VAR_BLOB)
     {
        blob_T *blob = argvars[0].vval.v_blob;
-       if (blob != NULL)
-       {
-           p = (char_u *)blob->bv_ga.ga_data;
-           len = blob->bv_ga.ga_len;
-           rettv->vval.v_string = vim_strsave(sha256_bytes(p, len, NULL, 0));
-       }
+       p = blob != NULL ? (char_u *)blob->bv_ga.ga_data : (char_u *)"";
+       len = blob != NULL ? blob->bv_ga.ga_len : 0;
+       rettv->vval.v_string = vim_strsave(sha256_bytes(p, len, NULL, 0));
     }
     else
     {
index 4da4a6f94e847ee2919f9640f05bff48fde0e260..16cfac8945f2fdc8563198ac44882957329b83be 100644 (file)
@@ -4,24 +4,25 @@ CheckFeature cryptv
 CheckFunction sha256
 
 function Test_sha256()
-  " test for empty string:
+  " tests for string:
+  " empty string
   call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(""))
-
-  "'test for 1 char:
+  " null string
+  call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(test_null_string()))
+  " string with 1 char
   call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256("a"))
-  "
-  "test for 3 chars:
+  " string with 3 chars
   call assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', "abc"->sha256())
-
-  " test for contains meta char:
+  " string containing meta char
   call assert_equal('807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776', sha256("foo\nbar"))
-
-  " test for contains non-ascii char:
+  " string containing non-ascii char
   call assert_equal('5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', sha256("\xde\xad\xbe\xef"))
 
-  " test for blob:
+  " tests for blob:
   " empty blob
   call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(0z))
+  " null blob
+  call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(test_null_blob()))
   " blob with single byte
   call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256(0z61))
   " blob with "abc"
index 80affcf8d588be42de73f02b52a51ba46a284d1b..53fef7dd9e6c638815528437d77ae01106ec4c97 100644 (file)
@@ -724,6 +724,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1778,
 /**/
     1777,
 /**/