From: Andreas Schneider Date: Mon, 28 Jun 2010 19:00:30 +0000 (+0200) Subject: s3-librpc: Fixed GUID_from_data_blob() with length of 32. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10e34cff5588b0d6434a093b3ecf90e6ccc1796a;p=thirdparty%2Fsamba.git s3-librpc: Fixed GUID_from_data_blob() with length of 32. If we hit the case that the blob length is 32. The code goes to the end of the function and generates a GUID with garbage. So try to convert the blob to the GUID and return. Fix bug #7538 (Backport fixes for GUID_from_data_blob). (cherry picked from commit 3c4353d2aa15db278bb87c949cce2deb3a5072ca) --- diff --git a/librpc/ndr/uuid.c b/librpc/ndr/uuid.c index 2b472468061..80c35cde861 100644 --- a/librpc/ndr/uuid.c +++ b/librpc/ndr/uuid.c @@ -81,11 +81,12 @@ _PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid) } else if (s->length == 32) { size_t rlen = strhex_to_str((char *)blob16.data, blob16.length, (const char *)s->data, s->length); - if (rlen == blob16.length) { - /* goto the ndr_pull_struct_blob() path */ - status = NT_STATUS_OK; - s = &blob16; + if (rlen != blob16.length) { + return NT_STATUS_INVALID_PARAMETER; } + + s = &blob16; + return GUID_from_ndr_blob(s, guid); } if (s->length == 16) {