diff options
author | Stefan Metzmacher <metze@samba.org> | 2021-11-03 13:57:50 +0100 |
---|---|---|
committer | Jule Anger <janger@samba.org> | 2022-01-30 10:57:11 +0000 |
commit | 7734584c4fd5bee49ed564771a16d63f2b005937 (patch) | |
tree | 3ff74a4c2e305b875c00202502f8d6ddd22a6355 /librpc | |
parent | 9be924f907c5215d9452db1cb407c83f39df67a5 (diff) | |
download | samba-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.c | 5 |
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, |