mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
kioslave: fix possible crash in case the FTP mode string is invalid
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
e88a8bd627
commit
1cdb2c631f
1 changed files with 50 additions and 46 deletions
|
@ -76,57 +76,61 @@ static inline int ftpUserModeFromChar(const char modechar, const int rmode, cons
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline mode_t ftpModeFromString(const char* const modestring)
|
static inline mode_t ftpModeFromString(const QByteArray &modestring)
|
||||||
{
|
{
|
||||||
mode_t result = 0;
|
mode_t result = 0;
|
||||||
switch (modestring[0]) {
|
if (modestring.size() != 10) {
|
||||||
case '-': {
|
kWarning(7103) << "Invalid FTP mode string" << modestring;
|
||||||
result |= S_IFREG;
|
return result;
|
||||||
break;
|
}
|
||||||
}
|
switch (modestring[0]) {
|
||||||
case 'b': {
|
case '-': {
|
||||||
result |= S_IFBLK;
|
result |= S_IFREG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'c': {
|
case 'b': {
|
||||||
result |= S_IFCHR;
|
result |= S_IFBLK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'd': {
|
case 'c': {
|
||||||
result |= S_IFDIR;
|
result |= S_IFCHR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'l': {
|
case 'd': {
|
||||||
result |= S_IFLNK;
|
result |= S_IFDIR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'p': {
|
case 'l': {
|
||||||
result |= S_IFIFO;
|
result |= S_IFLNK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 's': {
|
case 'p': {
|
||||||
result |= S_IFSOCK;
|
result |= S_IFIFO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
case 's': {
|
||||||
kWarning(7103) << "Invalid FTP mode string" << modestring;
|
result |= S_IFSOCK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
default: {
|
||||||
|
kWarning(7103) << "Invalid FTP mode string" << modestring;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result |= ftpUserModeFromChar(modestring[1], S_IRUSR, S_IWUSR, S_IXUSR);
|
result |= ftpUserModeFromChar(modestring[1], S_IRUSR, S_IWUSR, S_IXUSR);
|
||||||
result |= ftpUserModeFromChar(modestring[2], S_IRUSR, S_IWUSR, S_IXUSR);
|
result |= ftpUserModeFromChar(modestring[2], S_IRUSR, S_IWUSR, S_IXUSR);
|
||||||
result |= ftpUserModeFromChar(modestring[3], S_IRUSR, S_IWUSR, S_IXUSR);
|
result |= ftpUserModeFromChar(modestring[3], S_IRUSR, S_IWUSR, S_IXUSR);
|
||||||
|
|
||||||
result |= ftpUserModeFromChar(modestring[4], S_IRGRP, S_IWGRP, S_IXGRP);
|
result |= ftpUserModeFromChar(modestring[4], S_IRGRP, S_IWGRP, S_IXGRP);
|
||||||
result |= ftpUserModeFromChar(modestring[5], S_IRGRP, S_IWGRP, S_IXGRP);
|
result |= ftpUserModeFromChar(modestring[5], S_IRGRP, S_IWGRP, S_IXGRP);
|
||||||
result |= ftpUserModeFromChar(modestring[6], S_IRGRP, S_IWGRP, S_IXGRP);
|
result |= ftpUserModeFromChar(modestring[6], S_IRGRP, S_IWGRP, S_IXGRP);
|
||||||
|
|
||||||
result |= ftpUserModeFromChar(modestring[7], S_IROTH, S_IWOTH, S_IXOTH);
|
result |= ftpUserModeFromChar(modestring[7], S_IROTH, S_IWOTH, S_IXOTH);
|
||||||
result |= ftpUserModeFromChar(modestring[8], S_IROTH, S_IWOTH, S_IXOTH);
|
result |= ftpUserModeFromChar(modestring[8], S_IROTH, S_IWOTH, S_IXOTH);
|
||||||
result |= ftpUserModeFromChar(modestring[9], S_IROTH, S_IWOTH, S_IXOTH);
|
result |= ftpUserModeFromChar(modestring[9], S_IROTH, S_IWOTH, S_IXOTH);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// for reference:
|
// for reference:
|
||||||
|
|
Loading…
Add table
Reference in a new issue