From 458f71c629a3c4d7aa9815a90a72bd349c152dfd Mon Sep 17 00:00:00 2001 From: Weiwei Jia Date: Thu, 23 Apr 2015 23:34:27 -0400 Subject: [PATCH 1/5] Check not null before free memory --- vfs-ramcloud.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/vfs-ramcloud.c b/vfs-ramcloud.c index 050f23c..a9a29f7 100644 --- a/vfs-ramcloud.c +++ b/vfs-ramcloud.c @@ -22,7 +22,7 @@ #include "md5.h" #include "sqlite3.h" #include "vfs-ramcloud-stats.h" -#include +#include #ifdef __cplusplus extern "C" { @@ -370,10 +370,12 @@ void sqlite3_rcvfs_disconnect(SQLITE_RCVFS_CONNECTION *conn) { sqlite3_rcvfs_tls_destructor((void *)rcs); } pthread_key_delete(conn->tls); - sqlite3_free(conn->locator); - sqlite3_free(conn->cluster_name); - sqlite3_free(conn->table_name); - sqlite3_free(conn); + if (conn) { + if (conn->locator) sqlite3_free(conn->locator); + if (conn->cluster_name) sqlite3_free(conn->cluster_name); + if (conn->table_name) sqlite3_free(conn->table_name); + sqlite3_free(conn); + } } From 21e623443f3764df66e7cdc5a11565eb12c06067 Mon Sep 17 00:00:00 2001 From: Weiwei Jia Date: Thu, 23 Apr 2015 23:40:26 -0400 Subject: [PATCH 2/5] fix previous pull's incorrect include header path --- vfs-ramcloud.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vfs-ramcloud.c b/vfs-ramcloud.c index a9a29f7..07a2640 100644 --- a/vfs-ramcloud.c +++ b/vfs-ramcloud.c @@ -22,7 +22,7 @@ #include "md5.h" #include "sqlite3.h" #include "vfs-ramcloud-stats.h" -#include +#include #ifdef __cplusplus extern "C" { From 1d1e5c9306fc7da80c22d1f01b1b365b4220996b Mon Sep 17 00:00:00 2001 From: Weiwei Jia Date: Fri, 24 Apr 2015 08:11:06 -0400 Subject: [PATCH 3/5] Add user input ramcloud locator and database name for test cases --- test.c | 11 +++++++---- test2.c | 11 +++++++---- test3.c | 11 +++++++---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/test.c b/test.c index 00d02a5..f564d31 100644 --- a/test.c +++ b/test.c @@ -10,15 +10,18 @@ int main(int argc, char **argv) { int retval; - char *dbname = "./my-db"; - if (argc > 1) - dbname = argv[1]; + if (argc < 3) { + printf("usage: %s \n", argv[0]); + return 1; + } + char *locator = argv[1]; + char *dbname = argv[2]; //sqlite3_vfs *vfs = sqlite3_vfs_find("unix"); //assert(vfs != NULL); //retval = sqlite3_vfs_register(vfs, 1); SQLITE_RCVFS_CONNECTION *conn = - sqlite3_rcvfs_connect("zk:localhost:2181", "main", "sqlite3"); + sqlite3_rcvfs_connect(locator, "main", "sqlite3"); assert(conn != NULL); retval = sqlite3_vfs_register(sqlite3_rcvfs("ramcloud", conn), 1); assert(retval == 0); diff --git a/test2.c b/test2.c index 6806218..903db86 100644 --- a/test2.c +++ b/test2.c @@ -62,15 +62,18 @@ static void *mainThread(void *data) { int main(int argc, char **argv) { int retval; - dbname = "./my-db"; - if (argc > 1) - dbname = argv[1]; + if (argc < 3) { + printf("usage: %s \n", argv[0]); + return 1; + } + char *locator = argv[1]; + dbname = argv[2]; //sqlite3_vfs *vfs = sqlite3_vfs_find("unix"); //assert(vfs != NULL); //retval = sqlite3_vfs_register(vfs, 1); SQLITE_RCVFS_CONNECTION *conn = - sqlite3_rcvfs_connect("zk:localhost:2181", "main", "sqlite3"); + sqlite3_rcvfs_connect(locator, "main", "sqlite3"); assert(conn != NULL); retval = sqlite3_vfs_register(sqlite3_rcvfs("ramcloud", conn), 1); assert(retval == 0); diff --git a/test3.c b/test3.c index 3bc5b53..558b0b6 100644 --- a/test3.c +++ b/test3.c @@ -10,15 +10,18 @@ int main(int argc, char **argv) { int retval; - char *dbname = "./my-db"; - if (argc > 1) - dbname = argv[1]; + if (argc < 3) { + printf("usage: %s \n", argv[0]); + return 1; + } + char *locator = argv[1]; + char *dbname = argv[2]; //sqlite3_vfs *vfs = sqlite3_vfs_find("unix"); //assert(vfs != NULL); //retval = sqlite3_vfs_register(vfs, 1); SQLITE_RCVFS_CONNECTION *conn = - sqlite3_rcvfs_connect("zk:localhost:2181", "main", "sqlite3"); + sqlite3_rcvfs_connect(locator, "main", "sqlite3"); assert(conn != NULL); retval = sqlite3_vfs_register(sqlite3_rcvfs("ramcloud", conn), 1); assert(retval == 0); From 8452a0fbad4c9a535bf931702c07d15c05f7f9bd Mon Sep 17 00:00:00 2001 From: Weiwei Jia Date: Sun, 26 Apr 2015 00:11:05 -0400 Subject: [PATCH 4/5] Check not malloc successfully and close opened file before return --- vfs-ramcloud.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/vfs-ramcloud.c b/vfs-ramcloud.c index 07a2640..74fbfb3 100644 --- a/vfs-ramcloud.c +++ b/vfs-ramcloud.c @@ -22,7 +22,7 @@ #include "md5.h" #include "sqlite3.h" #include "vfs-ramcloud-stats.h" -#include +#include #ifdef __cplusplus extern "C" { @@ -1424,6 +1424,10 @@ int sqlite3_rcvfs_upload(SQLITE_RCVFS_CONNECTION *conn, const char *path) { f.permanentSize = f.handle.size; f.blockBuffer = (SQLITE_RCVFS_WBUFFER *) sqlite3_malloc(sizeof(SQLITE_RCVFS_WBUFFER)); + if (!f.blockBuffer) { + fclose(fsrc); + return SQLITE_NOMEM; + } f.blockBuffer->gauge = 0; unsigned i; for (i = 0; i < SQLITE_RCVFS_WBUF_NBLOCKS; ++i) @@ -1438,12 +1442,14 @@ int sqlite3_rcvfs_upload(SQLITE_RCVFS_CONNECTION *conn, const char *path) { retval = rcBufferedWrite(rcs, &f, buf, nbytes, iOfst); if (retval != SQLITE_OK) { rcClose((struct sqlite3_file *)&f); + fclose(fsrc); return retval; } iOfst += nbytes; } while (1); retval = rcSync((struct sqlite3_file *)&f, 0); rcClose((struct sqlite3_file *)&f); + fclose(fsrc); return retval; } @@ -1483,6 +1489,10 @@ int sqlite3_rcvfs_download(SQLITE_RCVFS_CONNECTION *conn, const char *path) { f.permanentSize = f.handle.size; f.blockBuffer = (SQLITE_RCVFS_WBUFFER *) sqlite3_malloc(sizeof(SQLITE_RCVFS_WBUFFER)); + if (!f.blockBuffer) { + fclose(fdst); + return SQLITE_NOMEM; + } f.blockBuffer->gauge = 0; unsigned i; for (i = 0; i < SQLITE_RCVFS_WBUF_NBLOCKS; ++i) From fc6d17bd5ead82f10ebaa24b187dc1f121dbf28a Mon Sep 17 00:00:00 2001 From: Weiwei Jia Date: Sun, 26 Apr 2015 00:15:12 -0400 Subject: [PATCH 5/5] Keep the right header file include path with master branch --- vfs-ramcloud.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vfs-ramcloud.c b/vfs-ramcloud.c index 74fbfb3..b09441f 100644 --- a/vfs-ramcloud.c +++ b/vfs-ramcloud.c @@ -22,7 +22,7 @@ #include "md5.h" #include "sqlite3.h" #include "vfs-ramcloud-stats.h" -#include +#include #ifdef __cplusplus extern "C" {