Fixing memory leak and zeroing on alloc.

This commit is contained in:
Ben Vanik 2014-01-19 01:51:57 -08:00
parent 268bbf105d
commit 71de4e77dc
4 changed files with 4 additions and 6 deletions

View File

@ -67,7 +67,6 @@ X_STATUS DiscImageEntry::QueryInfo(XFileInfo* out_info) {
X_STATUS DiscImageEntry::QueryDirectory( X_STATUS DiscImageEntry::QueryDirectory(
XDirectoryInfo* out_info, size_t length, bool restart) { XDirectoryInfo* out_info, size_t length, bool restart) {
XEASSERTNOTNULL(out_info); XEASSERTNOTNULL(out_info);
xe_zero_struct(out_info, length);
if (restart == true && gdfx_entry_iterator_ != gdfx_entry_->children.end()) { if (restart == true && gdfx_entry_iterator_ != gdfx_entry_->children.end()) {
gdfx_entry_iterator_ = gdfx_entry_->children.end(); gdfx_entry_iterator_ = gdfx_entry_->children.end();

View File

@ -76,7 +76,6 @@ X_STATUS HostPathEntry::QueryInfo(XFileInfo* out_info) {
X_STATUS HostPathEntry::QueryDirectory( X_STATUS HostPathEntry::QueryDirectory(
XDirectoryInfo* out_info, size_t length, bool restart) { XDirectoryInfo* out_info, size_t length, bool restart) {
XEASSERTNOTNULL(out_info); XEASSERTNOTNULL(out_info);
xe_zero_struct(out_info, length);
WIN32_FIND_DATA ffd; WIN32_FIND_DATA ffd;

View File

@ -46,7 +46,6 @@ X_STATUS STFSContainerEntry::QueryInfo(XFileInfo* out_info) {
X_STATUS STFSContainerEntry::QueryDirectory( X_STATUS STFSContainerEntry::QueryDirectory(
XDirectoryInfo* out_info, size_t length, bool restart) { XDirectoryInfo* out_info, size_t length, bool restart) {
XEASSERTNOTNULL(out_info); XEASSERTNOTNULL(out_info);
xe_zero_struct(out_info, length);
if (restart && stfs_entry_iterator_ != stfs_entry_->children.end()) { if (restart && stfs_entry_iterator_ != stfs_entry_->children.end()) {
stfs_entry_iterator_ = stfs_entry_->children.end(); stfs_entry_iterator_ = stfs_entry_->children.end();

View File

@ -530,12 +530,13 @@ SHIM_CALL NtQueryDirectoryFile_shim(
result = state->object_table()->GetObject( result = state->object_table()->GetObject(
file_handle, (XObject**)&file); file_handle, (XObject**)&file);
if (XSUCCEEDED(result)) { if (XSUCCEEDED(result)) {
XDirectoryInfo* dirInfo = (XDirectoryInfo*)xe_malloc(length); XDirectoryInfo* dir_info = (XDirectoryInfo*)xe_calloc(length);
result = file->QueryDirectory(dirInfo, length, restart_scan != 0); result = file->QueryDirectory(dir_info, length, restart_scan != 0);
if (XSUCCEEDED(result)) { if (XSUCCEEDED(result)) {
dirInfo->Write(SHIM_MEM_BASE, file_info_ptr); dir_info->Write(SHIM_MEM_BASE, file_info_ptr);
info = length; info = length;
} }
xe_free(dir_info);
} }
if (XFAILED(result)) { if (XFAILED(result)) {