summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2004-10-20 02:02:00 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:01:55 -0500
commit31e96d8def1dd2fea76d31a032d64e5917462dc8 (patch)
tree808f7c944e3aa873b4d6af6ddebfa8fa2e659986 /source4
parent72093ce62f1e09db86452720fe8280ad66824cde (diff)
downloadsamba-31e96d8def1dd2fea76d31a032d64e5917462dc8.tar.gz
samba-31e96d8def1dd2fea76d31a032d64e5917462dc8.tar.bz2
samba-31e96d8def1dd2fea76d31a032d64e5917462dc8.zip
r3073: Fix bug in the handling of null-terminated ASCII strings in RPC.
Because we didn't count the null terminator, we would not move past it in the packet. Andrew Bartlett (This used to be commit 8b38bffc7098610c469ab61b7e0e6884f046f286)
Diffstat (limited to 'source4')
-rw-r--r--source4/lib/util_str.c18
-rw-r--r--source4/librpc/ndr/ndr_basic.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/source4/lib/util_str.c b/source4/lib/util_str.c
index 03ba1399ef..07a2c1dbd1 100644
--- a/source4/lib/util_str.c
+++ b/source4/lib/util_str.c
@@ -1120,6 +1120,24 @@ int strcmp_safe(const char *s1, const char *s2)
/*******************************************************************
+return the number of bytes occupied by a buffer in ASCII format
+the result includes the null termination
+limited by 'n' bytes
+********************************************************************/
+size_t ascii_len_n(const char *src, size_t n)
+{
+ size_t len;
+
+ len = strnlen(src, n);
+ if (len+1 <= n) {
+ len += 1;
+ }
+
+ return len;
+}
+
+
+/*******************************************************************
Return a string representing a CIFS attribute for a file.
********************************************************************/
char *attrib_string(TALLOC_CTX *mem_ctx, uint32_t attrib)
diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c
index 5808ae7452..239b28e3e7 100644
--- a/source4/librpc/ndr/ndr_basic.c
+++ b/source4/librpc/ndr/ndr_basic.c
@@ -657,7 +657,7 @@ NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
case LIBNDR_FLAG_STR_NULLTERM:
if (byte_mul == 1) {
- len1 = strnlen(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
+ len1 = ascii_len_n(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
} else {
len1 = utf16_len_n(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
}