mirror of
https://github.com/samba-team/samba.git
synced 2025-02-25 17:57:42 +03:00
After talking with Jeremy and JF (and staring at packet traces between
NT <-> NT), I've come to realize that UNISTR2 strings should be NULL terminated. jerry
This commit is contained in:
parent
a290107aee
commit
c8f9e54bea
source
@ -171,7 +171,9 @@ typedef struct unistr2_info
|
||||
uint32 uni_max_len;
|
||||
uint32 undoc;
|
||||
uint32 uni_str_len;
|
||||
/* unicode characters. ***MUST*** be little-endian. **NOT** necessarily null-terminated */
|
||||
/* unicode characters. ***MUST*** be little-endian.
|
||||
**must** be null-terminated and the uni_str_len should include
|
||||
the NULL character */
|
||||
uint16 *buffer;
|
||||
|
||||
} UNISTR2;
|
||||
|
@ -852,14 +852,14 @@ void init_unistr2(UNISTR2 *str, const char *buf, size_t len)
|
||||
str->undoc = 0;
|
||||
str->uni_str_len = (uint32)len;
|
||||
|
||||
if (!parse_misc_talloc)
|
||||
if (!parse_misc_talloc)
|
||||
parse_misc_talloc = talloc_init();
|
||||
|
||||
if (len < MAX_UNISTRLEN)
|
||||
len = MAX_UNISTRLEN;
|
||||
len *= sizeof(uint16);
|
||||
|
||||
str->buffer = (uint16 *)talloc(parse_misc_talloc, len);
|
||||
str->buffer = (uint16 *)talloc(parse_misc_talloc, len);
|
||||
if (str->buffer == NULL)
|
||||
smb_panic("init_unistr2: malloc fail\n");
|
||||
|
||||
@ -867,6 +867,56 @@ void init_unistr2(UNISTR2 *str, const char *buf, size_t len)
|
||||
dos_struni2((char *)str->buffer, buf, len);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Inits a UNISTR2 structure from a UNISTR
|
||||
********************************************************************/
|
||||
void init_unistr2_from_unistr (UNISTR2 *to, UNISTR *from)
|
||||
{
|
||||
|
||||
BOOL found;
|
||||
uint32 i = 0;
|
||||
|
||||
if ((to == NULL) || (from == NULL) || (from->buffer == NULL))
|
||||
return;
|
||||
|
||||
ZERO_STRUCTP (to);
|
||||
|
||||
/* get the length; UNISTR **are** NULL terminated */
|
||||
found = False;
|
||||
while (!found)
|
||||
{
|
||||
if ((from->buffer)[i]=='\0' && (from->buffer)[(2*i)+1]=='\0')
|
||||
found = True;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
i++;
|
||||
|
||||
if (!found)
|
||||
{
|
||||
DEBUG(0,("init_unistr2_from_unistr: non-null terminiated UNISTR!\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* set up string lengths. */
|
||||
to->uni_max_len = i;
|
||||
to->undoc = 0;
|
||||
to->uni_str_len = i;
|
||||
|
||||
if (!parse_misc_talloc)
|
||||
parse_misc_talloc = talloc_init();
|
||||
|
||||
to->buffer = (uint16 *)talloc(parse_misc_talloc, sizeof(uint16)*(to->uni_str_len));
|
||||
if (to->buffer == NULL)
|
||||
smb_panic("init_unistr2_from_unistr: malloc fail\n");
|
||||
|
||||
for (i=0; i < to->uni_str_len; i++)
|
||||
to->buffer[i] = from->buffer[i];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
Reads or writes a UNISTR2 structure.
|
||||
XXXX NOTE: UNISTR2 structures need NOT be null-terminated.
|
||||
|
Loading…
x
Reference in New Issue
Block a user