subndr->flags = ndr->flags & ~LIBNDR_FLAG_NDR64;
if (size_is > 0) {
- NDR_CHECK(ndr_push_zero(subndr, size_is));
+ enum ndr_err_code status;
+
+ status = ndr_push_zero(subndr, size_is);
+ if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
+ talloc_free(subndr);
+ return status;
+ }
subndr->offset = 0;
subndr->relative_end_offset = size_is;
}
ndr = ndr_push_init_ctx(mem_ctx);
NDR_ERR_HAVE_NO_MEMORY(ndr);
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
+ NDR_CHECK_FREE(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
*blob = ndr_push_blob(ndr);
talloc_steal(mem_ctx, blob->data);
ndr = ndr_push_init_ctx(mem_ctx);
NDR_ERR_HAVE_NO_MEMORY(ndr);
- NDR_CHECK(ndr_push_set_switch_value(ndr, p, level));
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
+ NDR_CHECK_FREE(ndr_push_set_switch_value(ndr, p, level));
+ NDR_CHECK_FREE(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
*blob = ndr_push_blob(ndr);
talloc_steal(mem_ctx, blob->data);
subndr->data_size = 28;
subndr->offset = 0;
- NDR_CHECK(ndr_pull_advance(ndr, 28));
+ status = ndr_pull_advance(ndr, 28);
+ if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
+ talloc_free(subndr);
+ return status;
+ }
status = ndr_pull_dom_sid(subndr, ndr_flags, sid);
if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
ZERO_STRUCT(sid->sub_auths);
}
+ talloc_free(subndr);
return NDR_ERR_SUCCESS;
}