summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-08-21 12:27:12 +0200
committerMichael Meeks <michael.meeks@suse.com>2012-08-21 11:48:47 +0100
commitfa4fec47a8bb713f960acb474920f2c640e1c58a (patch)
treeb700d2d45d93f39cb8aa5e544d22ee216d0a5c6d
parentf672ba611a8cef83acad3233d27dc6414b463a42 (diff)
Related fdo#46249: FileStatus can have fewer fields than requested
Turns out 608fe962cc649ad62c489811d3a8666e0e06e5e7 "Let osl::FileStatus getters assert programming errors" was overly optimistic and misunderstood that osl_getFileStatus(..., nMask) /can/ return a FileStatus for which isValid(nMask) is false, esp. for stuff like file names and URLs of Windows drives and servers. That in turn leads to existing code now calling rtl::OUString(_aStatus.ustrFileName) etc. with null argument and crashing. Change-Id: Icd2168e209aa1c7a6df30cd954513d01034923db Signed-off-by: Michael Meeks <michael.meeks@suse.com>
-rw-r--r--sal/inc/osl/file.hxx67
1 files changed, 47 insertions, 20 deletions
diff --git a/sal/inc/osl/file.hxx b/sal/inc/osl/file.hxx
index 16f7a06fe1ea..96a7cdae68ec 100644
--- a/sal/inc/osl/file.hxx
+++ b/sal/inc/osl/file.hxx
@@ -729,8 +729,11 @@ public:
*/
inline Type getFileType() const
{
- assert(isValid(osl_FileStatus_Mask_Type));
- return static_cast< Type >(_aStatus.eType);
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_Type), "sal",
+ "no FileStatus Type determined");
+ return isValid(osl_FileStatus_Mask_Type)
+ ? static_cast< Type >(_aStatus.eType) : Unknown;
}
/** Is it a directory?
@@ -783,93 +786,117 @@ public:
inline sal_uInt64 getAttributes() const
{
- assert(isValid(osl_FileStatus_Mask_Attributes));
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_Attributes), "sal",
+ "no FileStatus Attributes determined");
return _aStatus.uAttributes;
}
/** Get the creation time of this file.
@return
- The creation time.
+ The creation time if this information is valid, an uninitialized
+ TimeValue otherwise.
*/
inline TimeValue getCreationTime() const
{
- assert(isValid(osl_FileStatus_Mask_CreationTime));
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_CreationTime), "sal",
+ "no FileStatus CreationTime determined");
return _aStatus.aCreationTime;
}
/** Get the file access time.
@return
- The last access time.
+ The last access time if this information is valid, an uninitialized
+ TimeValue otherwise.
*/
inline TimeValue getAccessTime() const
{
- assert(isValid(osl_FileStatus_Mask_AccessTime));
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_AccessTime), "sal",
+ "no FileStatus AccessTime determined");
return _aStatus.aAccessTime;
}
/** Get the file modification time.
@return
- The last modified time.
+ The last modified time if this information is valid, an uninitialized
+ TimeValue otherwise.
*/
inline TimeValue getModifyTime() const
{
- assert(isValid(osl_FileStatus_Mask_ModifyTime));
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_ModifyTime), "sal",
+ "no FileStatus ModifyTime determined");
return _aStatus.aModifyTime;
}
/** Get the size of the file.
@return
- The actual file size.
+ The actual file size if this information is valid, 0 otherwise.
*/
inline sal_uInt64 getFileSize() const
{
- assert(isValid(osl_FileStatus_Mask_FileSize));
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_FileSize), "sal",
+ "no FileStatus FileSize determined");
return _aStatus.uFileSize;
}
/** Get the file name.
@return
- The file name.
+ The file name if this information is valid, an empty string otherwise.
*/
inline ::rtl::OUString getFileName() const
{
- assert(isValid(osl_FileStatus_Mask_FileName));
- return rtl::OUString(_aStatus.ustrFileName);
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_FileName), "sal",
+ "no FileStatus FileName determined");
+ return isValid(osl_FileStatus_Mask_FileName)
+ ? rtl::OUString(_aStatus.ustrFileName) : rtl::OUString();
}
/** Get the URL of the file.
@return
- The full qualified URL of the file.
+ The full qualified URL of the file if this information is valid, an
+ empty string otherwise.
*/
inline ::rtl::OUString getFileURL() const
{
- assert(isValid(osl_FileStatus_Mask_FileURL));
- return rtl::OUString(_aStatus.ustrFileURL);
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_FileURL), "sal",
+ "no FileStatus FileURL determined");
+ return isValid(osl_FileStatus_Mask_FileURL)
+ ? rtl::OUString(_aStatus.ustrFileURL) : rtl::OUString();
}
/** Get the link target URL.
@return
- The link target URL.
+ The link target URL if this information is valid, an empty string
+ otherwise.
*/
inline ::rtl::OUString getLinkTargetURL() const
{
- assert(isValid(osl_FileStatus_Mask_LinkTargetURL));
- return rtl::OUString(_aStatus.ustrLinkTargetURL);
+ SAL_INFO_IF(
+ !isValid(osl_FileStatus_Mask_LinkTargetURL), "sal",
+ "no FileStatus LinkTargetURL determined");
+ return isValid(osl_FileStatus_Mask_LinkTargetURL)
+ ? rtl::OUString(_aStatus.ustrLinkTargetURL) : rtl::OUString();
}
friend class DirectoryItem;