From: Andrew Bartlett Date: Tue, 19 Nov 2019 21:45:02 +0000 (+1300) Subject: ndrdump: Still print --dump bytes after parse failure X-Git-Tag: ldb-2.1.0~660 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2da54d11f1e9744885558a64e72bf93b6009ae0e;p=thirdparty%2Fsamba.git ndrdump: Still print --dump bytes after parse failure Signed-off-by: Andrew Bartlett Reviewed-by: Douglas Bagnall --- diff --git a/librpc/tools/ndrdump.c b/librpc/tools/ndrdump.c index e2570bd4e49..f02b1edab02 100644 --- a/librpc/tools/ndrdump.c +++ b/librpc/tools/ndrdump.c @@ -594,17 +594,22 @@ static void ndr_print_dummy(struct ndr_print *ndr, const char *format, ...) printf("pull returned %s\n", ndr_map_error2string(ndr_err)); - if (!print_after_parse_failure && !NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { - TALLOC_FREE(mem_ctx); - exit(2); - } - if (ndr_pull->offset > ndr_pull->relative_highest_offset) { highest_ofs = ndr_pull->offset; } else { highest_ofs = ndr_pull->relative_highest_offset; } + if (dumpdata) { + printf("%d bytes consumed\n", highest_ofs); + ndrdump_data(blob.data, blob.length, dumpdata); + } + + if (!print_after_parse_failure && !NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + TALLOC_FREE(mem_ctx); + exit(2); + } + if (highest_ofs != ndr_pull->data_size) { printf("WARNING! %d unread bytes\n", ndr_pull->data_size - highest_ofs); ndrdump_data(ndr_pull->data+highest_ofs, @@ -612,9 +617,10 @@ static void ndr_print_dummy(struct ndr_print *ndr, const char *format, ...) dumpdata); } - if (dumpdata) { - printf("%d bytes consumed\n", highest_ofs); - ndrdump_data(blob.data, blob.length, dumpdata); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + printf("WARNING: pull of %s was incomplete, " + "therefore the parse below may SEGFAULT\n", + f->name); } f->ndr_print(ndr_print, format, flags, st);