Merge pull request #23973 from taosdata/fix/TD-27757

fix: memory access out of bounds in doGeomFromTextFunc
This commit is contained in:
wade zhang 2023-12-08 09:09:02 +08:00 committed by GitHub
commit c26d5fa6bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 10 deletions

View File

@ -67,15 +67,19 @@ int32_t doGeomFromTextFunc(const char *input, unsigned char **output) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
// make input as a zero ending string char *inputGeom = NULL;
char *end = varDataVal(input) + varDataLen(input);
char endValue = *end;
*end = 0;
unsigned char *outputGeom = NULL; unsigned char *outputGeom = NULL;
size_t size = 0; size_t size = 0;
code = doGeomFromText(varDataVal(input), &outputGeom, &size); // make a zero ending string
inputGeom = taosMemoryCalloc(1, varDataLen(input) + 1);
if (inputGeom == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
memcpy(inputGeom, varDataVal(input), varDataLen(input));
code = doGeomFromText(inputGeom, &outputGeom, &size);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
goto _exit; goto _exit;
} }
@ -92,8 +96,7 @@ int32_t doGeomFromTextFunc(const char *input, unsigned char **output) {
_exit: _exit:
geosFreeBuffer(outputGeom); geosFreeBuffer(outputGeom);
geosFreeBuffer(inputGeom);
*end = endValue; //recover the input string
return code; return code;
} }

View File

@ -79,7 +79,8 @@ else
unset LD_PRELOAD unset LD_PRELOAD
#export LD_PRELOAD=libasan.so.5 #export LD_PRELOAD=libasan.so.5
export LD_PRELOAD=$(gcc -print-file-name=libasan.so) #export LD_PRELOAD=$(gcc -print-file-name=libasan.so)
export LD_PRELOAD="$(realpath "$(gcc -print-file-name=libasan.so)") $(realpath "$(gcc -print-file-name=libstdc++.so)")"
echo "Preload AsanSo:" $? echo "Preload AsanSo:" $?
$* -a 2>$AsanFile $* -a 2>$AsanFile