qemu_find_file do not check file is a directory or just a file.
If qemu start with "-k ''", qemu_find_file get a empty string
as keymap file name, then, qemu treat the keymap path as keymap
file, it makes vnc keyboard input unusable.

Signed-off-by: Wang Xin <wangxinxin.w...@huawei.com>

diff --git a/vl.c b/vl.c
index ebd47af..2ec3832 100644
--- a/vl.c
+++ b/vl.c
@@ -2264,6 +2264,7 @@ char *qemu_find_file(int type, const char *name)
     int i;
     const char *subdir;
     char *buf;
+    struct stat file_stat;
 
     /* Try the name as a straight path first */
     if (access(name, R_OK) == 0) {
@@ -2284,7 +2285,13 @@ char *qemu_find_file(int type, const char *name)
 
     for (i = 0; i < data_dir_idx; i++) {
         buf = g_strdup_printf("%s/%s%s", data_dir[i], subdir, name);
-        if (access(buf, R_OK) == 0) {
+        if (stat(buf, &file_stat) < 0) {
+            error_report("can not get file '%s' stat: %s\n", buf,
+                         strerror(errno));
+            g_free(buf);
+            return NULL;
+        }
+        if (!S_ISDIR(file_stat.st_mode) && access(buf, R_OK) == 0) {
             trace_load_file(name, buf);
             return buf;
         }
-- 
2.8.1.windows.1



Reply via email to