diff options
author | Stefan Metzmacher <metze@samba.org> | 2021-11-03 13:57:50 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2022-01-24 15:25:36 +0000 |
commit | 43648e95a514020da4c7efa62df55d0882e3db85 (patch) | |
tree | fbcbfc2fb2620733d20bc3aec4d3b22955c22e43 /librpc | |
parent | 8da26cb6725b5d853ab481a348a3a672966715b5 (diff) | |
download | samba-43648e95a514020da4c7efa62df55d0882e3db85.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>
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, |