diff --git a/modules/dnn/src/torch/THDiskFile.cpp b/modules/dnn/src/torch/THDiskFile.cpp index 84b6b23e81..bede95e021 100644 --- a/modules/dnn/src/torch/THDiskFile.cpp +++ b/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 pos = 0L; + if (p == NULL) + THError("read error: failed to allocate buffer"); for (;;) { if(total-pos == 0) /* we need more space! */ { 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); if (pos < total) /* eof? */ { @@ -409,15 +415,21 @@ static long THDiskFile_readString(THFile *self, const char *format, char **str_) long pos = 0L; long size; + if (p == NULL) + THError("read error: failed to allocate buffer"); for (;;) { if(total-pos <= 1) /* we can only write '\0' in there! */ { 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(pos == 0L)