[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Thu Aug 10 00:27:02 UTC 2017


The branch, master has been updated
       via  d7e60bc tdb: Do not allow to pass NULL as the buffer to transaction_write()
       via  47bb276 tdb: Write zero data using 8k buffer in transaction_expand_file()
       via  f6a382f tdb: Avoid NULL tdb_write
       via  5c55c25 tdb: Consistency check for tdb_storev
      from  d55c27a vfs_fruit: factor out common code from ad_get() and ad_fget()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d7e60bc17e1f5428e5459e6d60a7c8b1f146a3aa
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Aug 9 09:58:35 2017 +0200

    tdb: Do not allow to pass NULL as the buffer to transaction_write()
    
    This fixes a GCC warning.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Thu Aug 10 02:26:09 CEST 2017 on sn-devel-144

commit 47bb27652e909ff411bea9000fd1a9f186458f3b
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Aug 9 10:53:12 2017 +0200

    tdb: Write zero data using 8k buffer in transaction_expand_file()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit f6a382fff822a0e01be8d8689328ef98dab47873
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Aug 9 10:16:36 2017 +0200

    tdb: Avoid NULL tdb_write
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 5c55c2563d04b563a7fd7027cf3128cb05b34fad
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Aug 9 10:15:27 2017 +0200

    tdb: Consistency check for tdb_storev
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/tdb/common/tdb.c         |  9 +++++++++
 lib/tdb/common/transaction.c | 32 ++++++++++++++++++++------------
 2 files changed, 29 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/tdb/common/tdb.c b/lib/tdb/common/tdb.c
index a67d8fb..04f7f97 100644
--- a/lib/tdb/common/tdb.c
+++ b/lib/tdb/common/tdb.c
@@ -541,6 +541,11 @@ static int _tdb_storev(struct tdb_context *tdb, TDB_DATA key,
 	for (i=0; i<num_dbufs; i++) {
 		size_t dsize = dbufs[i].dsize;
 
+		if ((dsize != 0) && (dbufs[i].dptr == NULL)) {
+			tdb->ecode = TDB_ERR_EINVAL;
+			goto fail;
+		}
+
 		dbufs_len += dsize;
 		if (dbufs_len < dsize) {
 			tdb->ecode = TDB_ERR_OOM;
@@ -614,6 +619,10 @@ static int _tdb_storev(struct tdb_context *tdb, TDB_DATA key,
 	ofs += key.dsize;
 
 	for (i=0; i<num_dbufs; i++) {
+		if (dbufs[i].dsize == 0) {
+			continue;
+		}
+
 		ret = tdb->methods->tdb_write(tdb, ofs, dbufs[i].dptr,
 					      dbufs[i].dsize);
 		if (ret == -1) {
diff --git a/lib/tdb/common/transaction.c b/lib/tdb/common/transaction.c
index 9b975ea..8ec0025 100644
--- a/lib/tdb/common/transaction.c
+++ b/lib/tdb/common/transaction.c
@@ -210,6 +210,10 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 {
 	uint32_t blk;
 
+	if (buf == NULL) {
+		return -1;
+	}
+
 	/* Only a commit is allowed on a prepared transaction */
 	if (tdb->transaction->prepared) {
 		tdb->ecode = TDB_ERR_EINVAL;
@@ -234,9 +238,7 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 		}
 		len -= len2;
 		off += len2;
-		if (buf != NULL) {
-			buf = (const void *)(len2 + (const char *)buf);
-		}
+		buf = (const void *)(len2 + (const char *)buf);
 	}
 
 	if (len == 0) {
@@ -289,11 +291,7 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 	}
 
 	/* overwrite part of an existing block */
-	if (buf == NULL) {
-		memset(tdb->transaction->blocks[blk] + off, 0, len);
-	} else {
-		memcpy(tdb->transaction->blocks[blk] + off, buf, len);
-	}
+	memcpy(tdb->transaction->blocks[blk] + off, buf, len);
 	if (blk == tdb->transaction->num_blocks-1) {
 		if (len + off > tdb->transaction->last_block_size) {
 			tdb->transaction->last_block_size = len + off;
@@ -393,10 +391,20 @@ static int transaction_oob(struct tdb_context *tdb, tdb_off_t off,
 static int transaction_expand_file(struct tdb_context *tdb, tdb_off_t size,
 				   tdb_off_t addition)
 {
-	/* add a write to the transaction elements, so subsequent
-	   reads see the zero data */
-	if (transaction_write(tdb, size, NULL, addition) != 0) {
-		return -1;
+	const char buf_zero[8192] = {0};
+	size_t buf_len = sizeof(buf_zero);
+
+	while (addition > 0) {
+		size_t n = MIN(addition, buf_len);
+		int ret;
+
+		ret = transaction_write(tdb, size, buf_zero, n);
+		if (ret != 0) {
+			return ret;
+		}
+
+		addition -= n;
+		size += n;
 	}
 
 	tdb->transaction->expanded = true;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list