diff options
author | Kentaro Hayashi <hayashi@clear-code.com> | 2016-07-21 16:02:21 +0900 |
---|---|---|
committer | Timothy Pearson <tpearson@raptorengineering.com> | 2019-03-17 00:34:02 -0500 |
commit | 99b1e41b9081e14b2b94784ffc0498667b8d108d (patch) | |
tree | 8849815cc449e4fbddace37e007b4ee5face95ac | |
parent | 627efbcafbe08823792d24c6d0df415f1f1d8b3f (diff) | |
download | xrdp-proprietary-99b1e41b9081e14b2b94784ffc0498667b8d108d.tar.gz xrdp-proprietary-99b1e41b9081e14b2b94784ffc0498667b8d108d.zip |
chansrv: avoid chansrv SEGV when xinode is NULL
When xfuse_create_file_in_xrdp_fs is failed, it returns NULL.
Without this fix, xinode->size causes SEGV, so implementation is changed
to return -1 and check the return value in caller.
-rw-r--r-- | sesman/chansrv/chansrv_fuse.c | 5 | ||||
-rw-r--r-- | sesman/chansrv/clipboard_file.c | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/sesman/chansrv/chansrv_fuse.c b/sesman/chansrv/chansrv_fuse.c index 0bb9ceff..80bde674 100644 --- a/sesman/chansrv/chansrv_fuse.c +++ b/sesman/chansrv/chansrv_fuse.c @@ -780,6 +780,11 @@ int xfuse_add_clip_dir_item(char *filename, int flags, int size, int lindex) 2, /* parent inode */ filename, S_IFREG); + if (xinode == NULL) + { + log_debug("failed to create file in xrdp filesystem"); + return -1; + } xinode->size = size; xinode->lindex = lindex; xinode->is_loc_resource = 1; diff --git a/sesman/chansrv/clipboard_file.c b/sesman/chansrv/clipboard_file.c index 562ee82d..8c2f2189 100644 --- a/sesman/chansrv/clipboard_file.c +++ b/sesman/chansrv/clipboard_file.c @@ -660,7 +660,11 @@ clipboard_c2s_in_files(struct stream *s, char *file_list) "supported [%s]", cfd->cFileName); continue; } - xfuse_add_clip_dir_item(cfd->cFileName, 0, cfd->fileSizeLow, lindex); + if (xfuse_add_clip_dir_item(cfd->cFileName, 0, cfd->fileSizeLow, lindex) == -1) + { + log_error("clipboard_c2s_in_files: failed to add clip dir item"); + continue; + } if (file_count > 0) { |