mirror of
https://github.com/samba-team/samba.git
synced 2025-12-04 08:23:50 +03:00
Fix for bug 7755 - SMBC_getdents_ctx() ignores struct alignment rules
Based on a fix from Sven Neumann <s.neumann@raumfeld.com>. Autobuild-User: Jeremy Allison <jra@samba.org> Autobuild-Date: Wed Oct 27 22:02:11 UTC 2010 on sn-devel-104
This commit is contained in:
@@ -1050,6 +1050,7 @@ SMBC_getdents_ctx(SMBCCTX *context,
|
|||||||
|
|
||||||
while ((dirlist = dir->dir_next)) {
|
while ((dirlist = dir->dir_next)) {
|
||||||
struct smbc_dirent *dirent;
|
struct smbc_dirent *dirent;
|
||||||
|
struct smbc_dirent *currentEntry = (struct smbc_dirent *)ndir;
|
||||||
|
|
||||||
if (!dirlist->dirent) {
|
if (!dirlist->dirent) {
|
||||||
|
|
||||||
@@ -1086,17 +1087,23 @@ SMBC_getdents_ctx(SMBCCTX *context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(ndir, dirent, reqd); /* Copy the data in ... */
|
memcpy(currentEntry, dirent, reqd); /* Copy the data in ... */
|
||||||
|
|
||||||
((struct smbc_dirent *)ndir)->comment =
|
currentEntry->comment = ¤tEntry->name[0] +
|
||||||
(char *)(&((struct smbc_dirent *)ndir)->name +
|
dirent->namelen + 1;
|
||||||
dirent->namelen +
|
|
||||||
1);
|
|
||||||
|
|
||||||
ndir += reqd;
|
ndir += reqd;
|
||||||
|
|
||||||
rem -= reqd;
|
rem -= reqd;
|
||||||
|
|
||||||
|
/* Try and align the struct for the next entry
|
||||||
|
on a valid pointer boundary by appending zeros */
|
||||||
|
while((rem > 0) && ((unsigned long long)ndir & (sizeof(void*) - 1))) {
|
||||||
|
*ndir = '\0';
|
||||||
|
rem--;
|
||||||
|
ndir++;
|
||||||
|
currentEntry->dirlen++;
|
||||||
|
}
|
||||||
|
|
||||||
dir->dir_next = dirlist = dirlist -> next;
|
dir->dir_next = dirlist = dirlist -> next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user