summaryrefslogtreecommitdiff
path: root/librpc
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2021-11-03 13:57:50 +0100
committerJule Anger <janger@samba.org>2022-01-30 10:57:11 +0000
commit7734584c4fd5bee49ed564771a16d63f2b005937 (patch)
tree3ff74a4c2e305b875c00202502f8d6ddd22a6355 /librpc
parent9be924f907c5215d9452db1cb407c83f39df67a5 (diff)
downloadsamba-7734584c4fd5bee49ed564771a16d63f2b005937.tar.gz
librpc/ndr: let ndr_push_string() let s_len == 0 result in d_len = 0
convert_string_talloc_handle() tries to play an the safe side and always returns a null terminated array. But for NDR we need to be correct on the wire... BUG: https://bugzilla.samba.org/show_bug.cgi?id=14956 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org> (cherry picked from commit 43648e95a514020da4c7efa62df55d0882e3db85)
Diffstat (limited to 'librpc')
-rw-r--r--librpc/ndr/ndr_string.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/librpc/ndr/ndr_string.c b/librpc/ndr/ndr_string.c
index b5421e99ff5..95b0366b791 100644
--- a/librpc/ndr/ndr_string.c
+++ b/librpc/ndr/ndr_string.c
@@ -236,7 +236,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_string(struct ndr_push *ndr, int ndr_flags,
s_len++;
}
- if (!do_convert) {
+ if (s_len == 0) {
+ d_len = 0;
+ dest = (uint8_t *)talloc_strdup(ndr, "");
+ } else if (!do_convert) {
d_len = s_len;
dest = (uint8_t *)talloc_strndup(ndr, s, s_len);
} else if (!convert_string_talloc(ndr, CH_UNIX, chset, s, s_len,