mirror of
https://github.com/facebook/zstd.git
synced 2025-07-30 22:23:13 +03:00
Fix buffer underflow for null dir1
This commit is contained in:
@ -870,30 +870,30 @@ static const char * trimPath(const char *pathname)
|
|||||||
|
|
||||||
static char* mallocAndJoin2Dir(const char *dir1, const char *dir2)
|
static char* mallocAndJoin2Dir(const char *dir1, const char *dir2)
|
||||||
{
|
{
|
||||||
const size_t dir1Size = strlen(dir1);
|
|
||||||
const size_t dir2Size = strlen(dir2);
|
|
||||||
char *outDirBuffer, *buffer, trailingChar;
|
|
||||||
|
|
||||||
assert(dir1 != NULL && dir2 != NULL);
|
assert(dir1 != NULL && dir2 != NULL);
|
||||||
outDirBuffer = (char *) malloc(dir1Size + dir2Size + 2);
|
{ const size_t dir1Size = strlen(dir1);
|
||||||
CONTROL(outDirBuffer != NULL);
|
const size_t dir2Size = strlen(dir2);
|
||||||
|
char *outDirBuffer, *buffer;
|
||||||
|
|
||||||
memcpy(outDirBuffer, dir1, dir1Size);
|
outDirBuffer = (char *) malloc(dir1Size + dir2Size + 2);
|
||||||
outDirBuffer[dir1Size] = '\0';
|
CONTROL(outDirBuffer != NULL);
|
||||||
|
|
||||||
|
memcpy(outDirBuffer, dir1, dir1Size);
|
||||||
|
outDirBuffer[dir1Size] = '\0';
|
||||||
|
|
||||||
|
if (dir2[0] == '.')
|
||||||
|
return outDirBuffer;
|
||||||
|
|
||||||
|
buffer = outDirBuffer + dir1Size;
|
||||||
|
if (dir1Size > 0 && *(buffer - 1) != PATH_SEP) {
|
||||||
|
*buffer = PATH_SEP;
|
||||||
|
buffer++;
|
||||||
|
}
|
||||||
|
memcpy(buffer, dir2, dir2Size);
|
||||||
|
buffer[dir2Size] = '\0';
|
||||||
|
|
||||||
if (dir2[0] == '.')
|
|
||||||
return outDirBuffer;
|
return outDirBuffer;
|
||||||
|
|
||||||
buffer = outDirBuffer + dir1Size;
|
|
||||||
trailingChar = *(buffer - 1);
|
|
||||||
if (trailingChar != PATH_SEP) {
|
|
||||||
*buffer = PATH_SEP;
|
|
||||||
buffer++;
|
|
||||||
}
|
}
|
||||||
memcpy(buffer, dir2, dir2Size);
|
|
||||||
buffer[dir2Size] = '\0';
|
|
||||||
|
|
||||||
return outDirBuffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this function will return NULL if input srcFileName is not valid name for mirrored output path */
|
/* this function will return NULL if input srcFileName is not valid name for mirrored output path */
|
||||||
|
Reference in New Issue
Block a user