]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
HGFS: Clean up HGFS server unpack file name V3 arguments
authorVMware, Inc <>
Wed, 18 Sep 2013 03:39:10 +0000 (20:39 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 23 Sep 2013 05:26:42 +0000 (22:26 -0700)
The HGFS server unpack file name argument for V3 packets generates coverity
warnings as it stands. It is also just plain dubious in its usage using the
out argument even when not initialized in the failure case.

Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
open-vm-tools/lib/hgfsServer/hgfsServerParameters.c

index 7245911703cc40f0b9ed8ad3e982e697f6d32a4c..6bf18785099eb0a30c8f8ebd95632538a86d8a86 100644 (file)
@@ -1415,14 +1415,17 @@ HgfsUnpackFileNameV3(const HgfsFileNameV3 *name,   // IN: file name
                      HgfsHandle *file,             // OUT: HGFS file handle
                      uint32 *caseFlags)            // OUT: case-sensitivity flags
 {
+   *useHandle = FALSE;
+   *file = HGFS_INVALID_HANDLE;
+   *cpName = NULL;
+   *cpNameSize = 0;
+
    /*
     * If we've been asked to reuse a handle, we don't need to look at, let
     * alone test the filename or its length.
     */
    if (name->flags & HGFS_FILE_NAME_USE_FILE_DESC) {
       *file = name->fid;
-      *cpName = NULL;
-      *cpNameSize = 0;
       *caseFlags = HGFS_FILE_NAME_DEFAULT_CASE;
       *useHandle = TRUE;
    } else {
@@ -1435,11 +1438,9 @@ HgfsUnpackFileNameV3(const HgfsFileNameV3 *name,   // IN: file name
          LOG(4, ("%s: Error unpacking file name - buffer too small\n", __FUNCTION__));
          return FALSE;
       }
-      *file = HGFS_INVALID_HANDLE;
       *cpName = name->name;
       *cpNameSize = name->length;
       *caseFlags = name->caseType;
-      *useHandle = FALSE;
    }
    return TRUE;
 }
@@ -1478,26 +1479,33 @@ HgfsUnpackDeletePayloadV3(const HgfsRequestDeleteV3 *requestV3, // IN: request p
                           HgfsHandle *file,                     // OUT: file handle
                           uint32 *caseFlags)                    // OUT: case-sensitivity flags
 {
-   Bool result;
+   Bool result = TRUE;
    Bool useHandle;
 
    if (payloadSize < sizeof *requestV3) {
-      return FALSE;
+      result = FALSE;
+      goto exit;
    }
 
    *hints = requestV3->hints;
 
-   result = HgfsUnpackFileNameV3(&requestV3->fileName,
-                                 payloadSize - sizeof *requestV3,
-                                 &useHandle,
-                                 cpName,
-                                 cpNameSize,
-                                 file,
-                                 caseFlags);
+   if (!HgfsUnpackFileNameV3(&requestV3->fileName,
+                             payloadSize - sizeof *requestV3,
+                             &useHandle,
+                             cpName,
+                             cpNameSize,
+                             file,
+                             caseFlags)) {
+      result = FALSE;
+      goto exit;
+   }
+
    if (useHandle) {
       *hints |= HGFS_DELETE_HINT_USE_FILE_DESC;
    }
 
+exit:
+   LOG(8, ("%s: unpacking HGFS_OP_DELETE_DIR/FILE_V3 -> %d\n", __FUNCTION__, result));
    return result;
 }
 
@@ -1854,6 +1862,7 @@ HgfsUnpackRenamePayloadV3(const HgfsRequestRenameV3 *requestV3, // IN: request p
       *hints |= HGFS_RENAME_HINT_USE_TARGETFILE_DESC;
    }
 
+   LOG(8, ("%s: unpacking HGFS_OP_RENAME_V3 -> success\n", __FUNCTION__));
    return TRUE;
 }
 
@@ -2197,26 +2206,33 @@ HgfsUnpackGetattrPayloadV3(const HgfsRequestGetattrV3 *requestV3,// IN: request
                            HgfsHandle *file,                     // OUT: file handle
                            uint32 *caseFlags)                    // OUT: case-sensitivity flags
 {
-   Bool result;
+   Bool result = TRUE;
    Bool useHandle;
 
    if (payloadSize < sizeof *requestV3) {
-      return FALSE;
+      result = FALSE;
+      goto exit;
    }
 
    *hints = requestV3->hints;
 
-   result = HgfsUnpackFileNameV3(&requestV3->fileName,
-                                 payloadSize - sizeof *requestV3,
-                                 &useHandle,
-                                 cpName,
-                                 cpNameSize,
-                                 file,
-                                 caseFlags);
+   if (!HgfsUnpackFileNameV3(&requestV3->fileName,
+                             payloadSize - sizeof *requestV3,
+                             &useHandle,
+                             cpName,
+                             cpNameSize,
+                             file,
+                             caseFlags)) {
+      result = FALSE;
+      goto exit;
+   }
+
    if (useHandle) {
       *hints |= HGFS_ATTR_HINT_USE_FILE_DESC;
    }
 
+exit:
+   LOG(8, ("%s: unpacking HGFS_OP_GETATTR_V3 -> %d\n", __FUNCTION__, result));
    return result;
 }
 
@@ -3390,30 +3406,35 @@ HgfsUnpackSetattrPayloadV3(const HgfsRequestSetattrV3 *requestV3,// IN: request
                            HgfsHandle *file,                     // OUT: file handle
                            uint32 *caseFlags)                    // OUT: case-sensitivity flags
 {
-   Bool result;
+   Bool result = TRUE;
    Bool useHandle;
 
    if (payloadSize < sizeof *requestV3) {
-      return FALSE;
+      result = FALSE;
+      goto exit;
    }
 
    *hints = requestV3->hints;
 
    HgfsUnpackAttrV2(&requestV3->attr, attr);
 
-   result = HgfsUnpackFileNameV3(&requestV3->fileName,
-                                 payloadSize - sizeof *requestV3,
-                                 &useHandle,
-                                 cpName,
-                                 cpNameSize,
-                                 file,
-                                 caseFlags);
+   if (!HgfsUnpackFileNameV3(&requestV3->fileName,
+                             payloadSize - sizeof *requestV3,
+                             &useHandle,
+                             cpName,
+                             cpNameSize,
+                             file,
+                             caseFlags)) {
+      result = FALSE;
+      goto exit;
+   }
+
    if (useHandle) {
       *hints |= HGFS_ATTR_HINT_USE_FILE_DESC;
    }
 
-   LOG(4, ("%s: unpacking HGFS_OP_SETATTR_V3, %u\n", __FUNCTION__,
-       *caseFlags));
+exit:
+   LOG(8, ("%s: unpacking HGFS_OP_SETATTR_V3 -> %d\n", __FUNCTION__, result));
    return result;
 }