Changeset: 2d3772cd87d4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2d3772cd87d4
Modified Files:
monetdb5/modules/mal/clients.c
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: Nov2019
Log Message:
The cryptographic hash function output of a null value is null
diffs (194 lines):
diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -310,13 +310,17 @@ CLTsetPrintTimeout(void *ret, int *secs)
str CLTmd5sum(str *ret, str *pw) {
#ifdef HAVE_MD5_UPDATE
- char *mret = mcrypt_MD5Sum(*pw, strlen(*pw));
+ if (strNil(*pw)) {
+ *ret = GDKstrdup(str_nil);
+ } else {
+ char *mret = mcrypt_MD5Sum(*pw, strlen(*pw));
- if (!mret)
- throw(MAL, "clients.md5sum", SQLSTATE(HY013) MAL_MALLOC_FAIL);
- *ret = GDKstrdup(mret);
- free(mret);
- if(*ret == NULL)
+ if (!mret)
+ throw(MAL, "clients.md5sum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *ret = GDKstrdup(mret);
+ free(mret);
+ }
+ if (*ret == NULL)
throw(MAL, "clients.md5sum", SQLSTATE(HY013) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
#else
@@ -328,13 +332,17 @@ str CLTmd5sum(str *ret, str *pw) {
str CLTsha1sum(str *ret, str *pw) {
#ifdef HAVE_SHA1_UPDATE
- char *mret = mcrypt_SHA1Sum(*pw, strlen(*pw));
+ if (strNil(*pw)) {
+ *ret = GDKstrdup(str_nil);
+ } else {
+ char *mret = mcrypt_SHA1Sum(*pw, strlen(*pw));
- if (!mret)
- throw(MAL, "clients.sha1sum", SQLSTATE(HY013) MAL_MALLOC_FAIL);
- *ret = GDKstrdup(mret);
- free(mret);
- if(*ret == NULL)
+ if (!mret)
+ throw(MAL, "clients.sha1sum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *ret = GDKstrdup(mret);
+ free(mret);
+ }
+ if (*ret == NULL)
throw(MAL, "clients.sha1sum", SQLSTATE(HY013) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
#else
@@ -346,13 +354,17 @@ str CLTsha1sum(str *ret, str *pw) {
str CLTripemd160sum(str *ret, str *pw) {
#ifdef HAVE_RIPEMD160_UPDATE
- char *mret = mcrypt_RIPEMD160Sum(*pw, strlen(*pw));
+ if (strNil(*pw)) {
+ *ret = GDKstrdup(str_nil);
+ } else {
+ char *mret = mcrypt_RIPEMD160Sum(*pw, strlen(*pw));
- if (!mret)
- throw(MAL, "clients.ripemd160sum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- *ret = GDKstrdup(mret);
- free(mret);
- if(*ret == NULL)
+ if (!mret)
+ throw(MAL, "clients.ripemd160sum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *ret = GDKstrdup(mret);
+ free(mret);
+ }
+ if (*ret == NULL)
throw(MAL, "clients.ripemd160sum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return MAL_SUCCEED;
#else
@@ -363,49 +375,56 @@ str CLTripemd160sum(str *ret, str *pw) {
}
str CLTsha2sum(str *ret, str *pw, int *bits) {
- char *mret;
- switch (*bits) {
+ if (strNil(*pw) || is_int_nil(*bits)) {
+ *ret = GDKstrdup(str_nil);
+ } else {
+ char *mret;
+ switch (*bits) {
#ifdef HAVE_SHA512_UPDATE
- case 512:
- mret = mcrypt_SHA512Sum(*pw, strlen(*pw));
- break;
+ case 512:
+ mret = mcrypt_SHA512Sum(*pw, strlen(*pw));
+ break;
#endif
#ifdef HAVE_SHA384_UPDATE
- case 384:
- mret = mcrypt_SHA384Sum(*pw, strlen(*pw));
- break;
+ case 384:
+ mret = mcrypt_SHA384Sum(*pw, strlen(*pw));
+ break;
#endif
#ifdef HAVE_SHA256_UPDATE
- case 256:
- mret = mcrypt_SHA256Sum(*pw, strlen(*pw));
- break;
+ case 256:
+ mret = mcrypt_SHA256Sum(*pw, strlen(*pw));
+ break;
#endif
#ifdef HAVE_SHA224_UPDATE
- case 224:
- mret = mcrypt_SHA224Sum(*pw, strlen(*pw));
- break;
+ case 224:
+ mret = mcrypt_SHA224Sum(*pw, strlen(*pw));
+ break;
#endif
- default:
- throw(ILLARG, "clients.sha2sum", "wrong number of bits "
- "for SHA2 sum: %d", *bits);
+ default:
+ throw(ILLARG, "clients.sha2sum", "wrong number
of bits "
+ "for SHA2 sum: %d", *bits);
+ }
+ if (!mret)
+ throw(MAL, "clients.sha2sum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *ret = GDKstrdup(mret);
+ free(mret);
}
-
- if (!mret)
- throw(MAL, "clients.sha2sum", SQLSTATE(HY013) MAL_MALLOC_FAIL);
- *ret = GDKstrdup(mret);
- free(mret);
- if(*ret == NULL)
+ if (*ret == NULL)
throw(MAL, "clients.sha2sum", SQLSTATE(HY013) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
str CLTbackendsum(str *ret, str *pw) {
- char *mret = mcrypt_BackendSum(*pw, strlen(*pw));
- if (mret == NULL)
- throw(MAL, "clients.backendsum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- *ret = GDKstrdup(mret);
- free(mret);
- if(*ret == NULL)
+ if (strNil(*pw)) {
+ *ret = GDKstrdup(str_nil);
+ } else {
+ char *mret = mcrypt_BackendSum(*pw, strlen(*pw));
+ if (mret == NULL)
+ throw(MAL, "clients.backendsum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *ret = GDKstrdup(mret);
+ free(mret);
+ }
+ if (*ret == NULL)
throw(MAL, "clients.backendsum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -550,7 +569,7 @@ CLTshutdown(Client cntxt, MalBlkPtr mb,
*ret = GDKstrdup(buf);
if ( force)
mal_exit(0);
- if(*ret == NULL)
+ if (*ret == NULL)
throw(MAL, "mal.shutdown", SQLSTATE(HY013) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
diff --git a/sql/test/miscellaneous/Tests/simple_selects.sql
b/sql/test/miscellaneous/Tests/simple_selects.sql
--- a/sql/test/miscellaneous/Tests/simple_selects.sql
+++ b/sql/test/miscellaneous/Tests/simple_selects.sql
@@ -24,3 +24,4 @@ select substring('abc' from null for nul
select length(myblob), octet_length(myblob), length(mystr),
octet_length(mystr)
from (values (cast(null as blob), cast(null as char(32)))) as my(myblob,
mystr);
+select md5(null);
diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.out
b/sql/test/miscellaneous/Tests/simple_selects.stable.out
--- a/sql/test/miscellaneous/Tests/simple_selects.stable.out
+++ b/sql/test/miscellaneous/Tests/simple_selects.stable.out
@@ -168,6 +168,12 @@ stdout of test 'simple_selects` in direc
% int, int, int, int # type
% 1, 1, 1, 1 # length
[ NULL, NULL, NULL, NULL ]
+#select md5(null);
+% .L2 # table_name
+% L2 # name
+% clob # type
+% 0 # length
+[ NULL ]
# 17:31:38 >
# 17:31:38 > "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list