Commit cdaa10ce authored by Michael Terry's avatar Michael Terry Committed by Ondrej Holy
Browse files

daemon: Avoid overflowing when querying for filesystem info

Filesystem sizes can be large and in danger of overflowing. Guard
against that possibility in the dav and fuse FS query code.

https://bugzilla.gnome.org/show_bug.cgi?id=786177
parent dd2b1ff8
......@@ -645,7 +645,10 @@ vfs_statfs (const gchar *path, struct statvfs *stbuf)
if (file_info)
{
if (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE))
stbuf->f_blocks = (g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE) + 4096 - 1) / 4096;
{
guint64 size = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE);
stbuf->f_blocks = (size > 0) ? ((size - 1) / 4096 + 1) : 0;
}
if (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE))
stbuf->f_bfree = stbuf->f_bavail = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE) / 4096;
......
......@@ -1202,7 +1202,7 @@ ms_response_to_fs_info (MsResponse *response,
g_file_info_set_attribute_uint64 (info,
G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
bytes_avail);
if (have_bytes_used)
if (have_bytes_used && G_MAXUINT64 - bytes_avail >= bytes_used)
g_file_info_set_attribute_uint64 (info,
G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,
bytes_avail + bytes_used);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment