Merge pull request #24291 from visitorckw:fix-memory-leak

Fix memory leak and handle realloc failure
pull/24302/head
Alexander Smorkalov 1 year ago committed by GitHub
commit 799bb0cd18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      modules/dnn/src/torch/THDiskFile.cpp

@ -375,15 +375,21 @@ static long THDiskFile_readString(THFile *self, const char *format, char **str_)
long total = TBRS_BSZ; long total = TBRS_BSZ;
long pos = 0L; long pos = 0L;
if (p == NULL)
THError("read error: failed to allocate buffer");
for (;;) for (;;)
{ {
if(total-pos == 0) /* we need more space! */ if(total-pos == 0) /* we need more space! */
{ {
total += TBRS_BSZ; total += TBRS_BSZ;
p = (char*)THRealloc(p, total); char *new_p = (char*)THRealloc(p, total);
if (new_p == NULL)
{
THFree(p);
THError("read error: failed to reallocate buffer");
}
p = new_p;
} }
if (p == NULL)
THError("read error: failed to allocate buffer");
pos += fread(p+pos, 1, total-pos, dfself->handle); pos += fread(p+pos, 1, total-pos, dfself->handle);
if (pos < total) /* eof? */ if (pos < total) /* eof? */
{ {
@ -409,15 +415,21 @@ static long THDiskFile_readString(THFile *self, const char *format, char **str_)
long pos = 0L; long pos = 0L;
long size; long size;
if (p == NULL)
THError("read error: failed to allocate buffer");
for (;;) for (;;)
{ {
if(total-pos <= 1) /* we can only write '\0' in there! */ if(total-pos <= 1) /* we can only write '\0' in there! */
{ {
total += TBRS_BSZ; total += TBRS_BSZ;
p = (char*)THRealloc(p, total); char *new_p = (char*)THRealloc(p, total);
if (new_p == NULL)
{
THFree(p);
THError("read error: failed to reallocate buffer");
}
p = new_p;
} }
if (p == NULL)
THError("read error: failed to allocate buffer");
if (fgets(p+pos, total-pos, dfself->handle) == NULL) /* eof? */ if (fgets(p+pos, total-pos, dfself->handle) == NULL) /* eof? */
{ {
if(pos == 0L) if(pos == 0L)

Loading…
Cancel
Save