From b9a799e22edcc721a4ec8a443618648e177d479f Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 17 Oct 2016 15:44:20 -0400 Subject: [PATCH] Fixes to DosQueryCurrentDir(). This API shouldn't return a drive letter or initial path separator, and also shouldn't leak memory. --- native/doscalls.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/native/doscalls.c b/native/doscalls.c index 34b4897..5594ac8 100644 --- a/native/doscalls.c +++ b/native/doscalls.c @@ -2098,20 +2098,28 @@ APIRET DosQueryCurrentDir(ULONG disknum, PBYTE pBuf, PULONG pcbBuf) return ERROR_NOT_ENOUGH_MEMORY; // this doesn't ever return this error on OS/2. const size_t len = strlen(cwd); - if ((len + 3) > *pcbBuf) { - *pcbBuf = len + 3; + if ((len + 1) > *pcbBuf) { + *pcbBuf = len + 1; + free(cwd); return ERROR_BUFFER_OVERFLOW; } // if char *ptr = (char *) pBuf; - *(ptr++) = 'C'; - *(ptr++) = ':'; - for (char *src = cwd; *src; src++) { + + char *src = cwd; + while (*src == '/') + src++; // skip initial '/' char. + + while (*src) { const char ch = *src; *(ptr++) = ((ch == '/') ? '\\' : ch); - } // for + src++; + } // while + *ptr = '\0'; + free(cwd); + return NO_ERROR; } // DosQueryCurrentDir