Make sure to check agains null pointer in disk_create()

Simplified FileRenameInformation in disk_set_information()
and handle error if newname is null.



git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1775 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Henrik Andersson 2013-12-06 13:52:29 +00:00
parent fe10877ed5
commit 013ac6d541
2 changed files with 12 additions and 13 deletions

23
disk.c
View File

@ -354,9 +354,10 @@ disk_create(uint32 device_id, uint32 accessmask, uint32 sharemode, uint32 create
flags = 0;
mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
if (*filename && filename[strlen(filename) - 1] == '/')
if (filename && *filename && filename[strlen(filename) - 1] == '/')
filename[strlen(filename) - 1] = 0;
sprintf(path, "%s%s", g_rdpdr_device[device_id].local_path, filename);
sprintf(path, "%s%s", g_rdpdr_device[device_id].local_path, filename ? filename : "");
/* Protect against mailicous servers:
somelongpath/.. not allowed
@ -816,18 +817,14 @@ disk_set_information(RD_NTHANDLE handle, uint32 info_class, STREAM in, STREAM ou
in_uint8s(in, 0x1a); /* unknown */
in_uint32_le(in, length);
if (length && (length / 2) < 256)
{
rdp_in_unistr(in, length, &newname, &length);
if (newname == NULL)
return RD_STATUS_INVALID_PARAMETER;
convert_to_unix_filename(newname);
}
else
{
if (length && (length / 2) >= 256)
return RD_STATUS_INVALID_PARAMETER;
}
rdp_in_unistr(in, length, &newname, &length);
if (newname == NULL)
return RD_STATUS_INVALID_PARAMETER;
convert_to_unix_filename(newname);
sprintf(fullpath, "%s%s", g_rdpdr_device[pfinfo->device_id].local_path,
newname);

View File

@ -377,6 +377,8 @@ rdpdr_process_irp(STREAM s)
in_uint32_le(s, major);
in_uint32_le(s, minor);
filename = NULL;
buffer_len = 0;
buffer = (uint8 *) xmalloc(1024);
buffer[0] = 0;