mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Now checking the result of all realloc() calls
This commit is contained in:
parent
e145ee45e2
commit
d1ab9dbc5f
3
HISTORY
3
HISTORY
@ -6481,7 +6481,7 @@ Video Disk Recorder Revision History
|
|||||||
from Osama Alrawab). See INSTALL for information on how to turn this on.
|
from Osama Alrawab). See INSTALL for information on how to turn this on.
|
||||||
- Added Arabian language texts (thanks to Osama Alrawab).
|
- Added Arabian language texts (thanks to Osama Alrawab).
|
||||||
|
|
||||||
2011-02-20: Version 1.7.17
|
2011-02-25: Version 1.7.17
|
||||||
|
|
||||||
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
|
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
|
||||||
- Fixed following symbolic links in RemoveFileOrDir() (cont'd) (thanks to
|
- Fixed following symbolic links in RemoveFileOrDir() (cont'd) (thanks to
|
||||||
@ -6538,3 +6538,4 @@ Video Disk Recorder Revision History
|
|||||||
- Fixed reallocating memory in the "pictures" plugin (reported by Paul Menzel, with
|
- Fixed reallocating memory in the "pictures" plugin (reported by Paul Menzel, with
|
||||||
input from Oliver Endriss).
|
input from Oliver Endriss).
|
||||||
- Fixed reallocating memory in cTsToPes::PutTs() (suggested by Oliver Endriss).
|
- Fixed reallocating memory in cTsToPes::PutTs() (suggested by Oliver Endriss).
|
||||||
|
- Now checking the result of all realloc() calls.
|
||||||
|
30
device.c
30
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 2.37 2010/06/03 13:35:02 kls Exp $
|
* $Id: device.c 2.38 2011/02/25 15:12:03 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -1087,12 +1087,18 @@ void cDevice::StillPicture(const uchar *Data, int Length)
|
|||||||
int l;
|
int l;
|
||||||
while (const uchar *p = TsToPes.GetPes(l)) {
|
while (const uchar *p = TsToPes.GetPes(l)) {
|
||||||
int Offset = Size;
|
int Offset = Size;
|
||||||
Size += l;
|
int NewSize = Size + l;
|
||||||
buf = (uchar *)realloc(buf, Size);
|
if (uchar *NewBuffer = (uchar *)realloc(buf, NewSize)) {
|
||||||
if (!buf)
|
Size = NewSize;
|
||||||
return;
|
buf = NewBuffer;
|
||||||
memcpy(buf + Offset, p, l);
|
memcpy(buf + Offset, p, l);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
LOG_ERROR_STR("out of memory");
|
||||||
|
free(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
TsToPes.Reset();
|
TsToPes.Reset();
|
||||||
}
|
}
|
||||||
TsToPes.PutTs(Data, TS_SIZE);
|
TsToPes.PutTs(Data, TS_SIZE);
|
||||||
@ -1103,12 +1109,18 @@ void cDevice::StillPicture(const uchar *Data, int Length)
|
|||||||
int l;
|
int l;
|
||||||
while (const uchar *p = TsToPes.GetPes(l)) {
|
while (const uchar *p = TsToPes.GetPes(l)) {
|
||||||
int Offset = Size;
|
int Offset = Size;
|
||||||
Size += l;
|
int NewSize = Size + l;
|
||||||
buf = (uchar *)realloc(buf, Size);
|
if (uchar *NewBuffer = (uchar *)realloc(buf, NewSize)) {
|
||||||
if (!buf)
|
Size = NewSize;
|
||||||
return;
|
buf = NewBuffer;
|
||||||
memcpy(buf + Offset, p, l);
|
memcpy(buf + Offset, p, l);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
free(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
StillPicture(buf, Size);
|
StillPicture(buf, Size);
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Original author: Marco Schlüßler <marco@lordzodiac.de>
|
* Original author: Marco Schlüßler <marco@lordzodiac.de>
|
||||||
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
|
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
|
||||||
*
|
*
|
||||||
* $Id: dvbsubtitle.c 2.8 2010/10/24 12:25:45 kls Exp $
|
* $Id: dvbsubtitle.c 2.9 2011/02/25 15:13:32 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbsubtitle.h"
|
#include "dvbsubtitle.h"
|
||||||
@ -570,12 +570,17 @@ void cDvbSubtitleAssembler::Reset(void)
|
|||||||
bool cDvbSubtitleAssembler::Realloc(int Size)
|
bool cDvbSubtitleAssembler::Realloc(int Size)
|
||||||
{
|
{
|
||||||
if (Size > size) {
|
if (Size > size) {
|
||||||
size = max(Size, 2048);
|
Size = max(Size, 2048);
|
||||||
data = (uchar *)realloc(data, size);
|
if (uchar *NewBuffer = (uchar *)realloc(data, Size)) {
|
||||||
if (!data) {
|
size = Size;
|
||||||
|
data = NewBuffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
esyslog("ERROR: can't allocate memory for subtitle assembler");
|
esyslog("ERROR: can't allocate memory for subtitle assembler");
|
||||||
length = 0;
|
length = 0;
|
||||||
size = 0;
|
size = 0;
|
||||||
|
free(data);
|
||||||
|
data = NULL;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
epg.c
21
epg.c
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
*
|
*
|
||||||
* $Id: epg.c 2.6 2010/02/28 14:24:55 kls Exp $
|
* $Id: epg.c 2.7 2011/02/25 15:16:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "epg.h"
|
#include "epg.h"
|
||||||
@ -56,25 +56,34 @@ cComponents::~cComponents(void)
|
|||||||
free(components);
|
free(components);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cComponents::Realloc(int Index)
|
bool cComponents::Realloc(int Index)
|
||||||
{
|
{
|
||||||
if (Index >= numComponents) {
|
if (Index >= numComponents) {
|
||||||
|
Index++;
|
||||||
|
if (tComponent *NewBuffer = (tComponent *)realloc(components, Index * sizeof(tComponent))) {
|
||||||
int n = numComponents;
|
int n = numComponents;
|
||||||
numComponents = Index + 1;
|
numComponents = Index;
|
||||||
components = (tComponent *)realloc(components, numComponents * sizeof(tComponent));
|
components = NewBuffer;
|
||||||
memset(&components[n], 0, sizeof(tComponent) * (numComponents - n));
|
memset(&components[n], 0, sizeof(tComponent) * (numComponents - n));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cComponents::SetComponent(int Index, const char *s)
|
void cComponents::SetComponent(int Index, const char *s)
|
||||||
{
|
{
|
||||||
Realloc(Index);
|
if (Realloc(Index))
|
||||||
components[Index].FromString(s);
|
components[Index].FromString(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cComponents::SetComponent(int Index, uchar Stream, uchar Type, const char *Language, const char *Description)
|
void cComponents::SetComponent(int Index, uchar Stream, uchar Type, const char *Language, const char *Description)
|
||||||
{
|
{
|
||||||
Realloc(Index);
|
if (!Realloc(Index))
|
||||||
|
return;
|
||||||
tComponent *p = &components[Index];
|
tComponent *p = &components[Index];
|
||||||
p->stream = Stream;
|
p->stream = Stream;
|
||||||
p->type = Type;
|
p->type = Type;
|
||||||
|
4
epg.h
4
epg.h
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
*
|
*
|
||||||
* $Id: epg.h 2.4 2010/01/08 15:20:34 kls Exp $
|
* $Id: epg.h 2.5 2011/02/25 14:14:38 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __EPG_H
|
#ifndef __EPG_H
|
||||||
@ -51,7 +51,7 @@ class cComponents {
|
|||||||
private:
|
private:
|
||||||
int numComponents;
|
int numComponents;
|
||||||
tComponent *components;
|
tComponent *components;
|
||||||
void Realloc(int Index);
|
bool Realloc(int Index);
|
||||||
public:
|
public:
|
||||||
cComponents(void);
|
cComponents(void);
|
||||||
~cComponents(void);
|
~cComponents(void);
|
||||||
|
12
menu.c
12
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 2.25 2010/12/12 13:36:20 kls Exp $
|
* $Id: menu.c 2.26 2011/02/25 14:24:32 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -1860,8 +1860,14 @@ eOSState cMenuCommands::Execute(void)
|
|||||||
int l = 0;
|
int l = 0;
|
||||||
int c;
|
int c;
|
||||||
while ((c = fgetc(p)) != EOF) {
|
while ((c = fgetc(p)) != EOF) {
|
||||||
if (l % 20 == 0)
|
if (l % 20 == 0) {
|
||||||
result = (char *)realloc(result, l + 21);
|
if (char *NewBuffer = (char *)realloc(result, l + 21))
|
||||||
|
result = NewBuffer;
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
result[l++] = char(c);
|
result[l++] = char(c);
|
||||||
}
|
}
|
||||||
if (result)
|
if (result)
|
||||||
|
38
recording.c
38
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 2.24 2010/12/27 12:02:00 kls Exp $
|
* $Id: recording.c 2.25 2011/02/25 14:35:19 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -548,7 +548,8 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
default:
|
default:
|
||||||
if (strchr(InvalidChars, *p) || *p == '.' && (!*(p + 1) || *(p + 1) == FOLDERDELIMCHAR)) { // Windows can't handle '.' at the end of file/directory names
|
if (strchr(InvalidChars, *p) || *p == '.' && (!*(p + 1) || *(p + 1) == FOLDERDELIMCHAR)) { // Windows can't handle '.' at the end of file/directory names
|
||||||
int l = p - s;
|
int l = p - s;
|
||||||
s = (char *)realloc(s, strlen(s) + 10);
|
if (char *NewBuffer = (char *)realloc(s, strlen(s) + 10)) {
|
||||||
|
s = NewBuffer;
|
||||||
p = s + l;
|
p = s + l;
|
||||||
char buf[4];
|
char buf[4];
|
||||||
sprintf(buf, "#%02X", (unsigned char)*p);
|
sprintf(buf, "#%02X", (unsigned char)*p);
|
||||||
@ -556,6 +557,9 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
strncpy(p, buf, 3);
|
strncpy(p, buf, 3);
|
||||||
p += 2;
|
p += 2;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -729,10 +733,14 @@ cRecording::cRecording(const char *FileName)
|
|||||||
if (data[line]) {
|
if (data[line]) {
|
||||||
int len = strlen(s);
|
int len = strlen(s);
|
||||||
len += strlen(data[line]) + 1;
|
len += strlen(data[line]) + 1;
|
||||||
data[line] = (char *)realloc(data[line], len + 1);
|
if (char *NewBuffer = (char *)realloc(data[line], len + 1)) {
|
||||||
|
data[line] = NewBuffer;
|
||||||
strcat(data[line], "\n");
|
strcat(data[line], "\n");
|
||||||
strcat(data[line], s);
|
strcat(data[line], s);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
data[line] = strdup(s);
|
data[line] = strdup(s);
|
||||||
}
|
}
|
||||||
@ -750,13 +758,17 @@ cRecording::cRecording(const char *FileName)
|
|||||||
// line 1 and line 2 to be the long text:
|
// line 1 and line 2 to be the long text:
|
||||||
int len = strlen(data[1]);
|
int len = strlen(data[1]);
|
||||||
if (len > 80) {
|
if (len > 80) {
|
||||||
data[1] = (char *)realloc(data[1], len + 1 + strlen(data[2]) + 1);
|
if (char *NewBuffer = (char *)realloc(data[1], len + 1 + strlen(data[2]) + 1)) {
|
||||||
|
data[1] = NewBuffer;
|
||||||
strcat(data[1], "\n");
|
strcat(data[1], "\n");
|
||||||
strcat(data[1], data[2]);
|
strcat(data[1], data[2]);
|
||||||
free(data[2]);
|
free(data[2]);
|
||||||
data[2] = data[1];
|
data[2] = data[1];
|
||||||
data[1] = NULL;
|
data[1] = NULL;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
info->SetData(data[0], data[1], data[2]);
|
info->SetData(data[0], data[1], data[2]);
|
||||||
for (int i = 0; i < 3; i ++)
|
for (int i = 0; i < 3; i ++)
|
||||||
@ -1620,13 +1632,15 @@ bool cIndexFile::CatchUp(int Index)
|
|||||||
}
|
}
|
||||||
int newLast = int(buf.st_size / sizeof(tIndexTs) - 1);
|
int newLast = int(buf.st_size / sizeof(tIndexTs) - 1);
|
||||||
if (newLast > last) {
|
if (newLast > last) {
|
||||||
if (size <= newLast) {
|
int NewSize = size;
|
||||||
size *= 2;
|
if (NewSize <= newLast) {
|
||||||
if (size <= newLast)
|
NewSize *= 2;
|
||||||
size = newLast + 1;
|
if (NewSize <= newLast)
|
||||||
|
NewSize = newLast + 1;
|
||||||
}
|
}
|
||||||
index = (tIndexTs *)realloc(index, size * sizeof(tIndexTs));
|
if (tIndexTs *NewBuffer = (tIndexTs *)realloc(index, NewSize * sizeof(tIndexTs))) {
|
||||||
if (index) {
|
size = NewSize;
|
||||||
|
index = NewBuffer;
|
||||||
int offset = (last + 1) * sizeof(tIndexTs);
|
int offset = (last + 1) * sizeof(tIndexTs);
|
||||||
int delta = (newLast - last) * sizeof(tIndexTs);
|
int delta = (newLast - last) * sizeof(tIndexTs);
|
||||||
if (lseek(f, offset, SEEK_SET) == offset) {
|
if (lseek(f, offset, SEEK_SET) == offset) {
|
||||||
@ -1645,8 +1659,10 @@ bool cIndexFile::CatchUp(int Index)
|
|||||||
else
|
else
|
||||||
LOG_ERROR_STR(fileName);
|
LOG_ERROR_STR(fileName);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
esyslog("ERROR: can't realloc() index");
|
esyslog("ERROR: can't realloc() index");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
3
remux.c
3
remux.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: remux.c 2.49 2011/02/20 17:27:47 kls Exp $
|
* $Id: remux.c 2.50 2011/02/25 15:19:57 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "remux.h"
|
#include "remux.h"
|
||||||
@ -672,6 +672,7 @@ void cTsToPes::PutTs(const uchar *Data, int Length)
|
|||||||
size = NewSize;
|
size = NewSize;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
Reset();
|
Reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
14
svdrp.c
14
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 2.8 2010/01/17 12:23:31 kls Exp $
|
* $Id: svdrp.c 2.9 2011/02/25 14:38:45 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -1664,8 +1664,16 @@ bool cSVDRP::Process(void)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (numChars >= length - 1) {
|
if (numChars >= length - 1) {
|
||||||
length += BUFSIZ;
|
int NewLength = length + BUFSIZ;
|
||||||
cmdLine = (char *)realloc(cmdLine, length);
|
if (char *NewBuffer = (char *)realloc(cmdLine, NewLength)) {
|
||||||
|
length = NewLength;
|
||||||
|
cmdLine = NewBuffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
Close();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cmdLine[numChars++] = c;
|
cmdLine[numChars++] = c;
|
||||||
cmdLine[numChars] = 0;
|
cmdLine[numChars] = 0;
|
||||||
|
26
themes.c
26
themes.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: themes.c 1.8 2008/02/10 16:25:00 kls Exp $
|
* $Id: themes.c 2.1 2011/02/25 14:45:18 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "themes.h"
|
#include "themes.h"
|
||||||
@ -248,12 +248,30 @@ bool cThemes::Load(const char *SkinName)
|
|||||||
cString FileName = AddDirectory(themesDirectory, e->d_name);
|
cString FileName = AddDirectory(themesDirectory, e->d_name);
|
||||||
cTheme Theme;
|
cTheme Theme;
|
||||||
if (Theme.Load(*FileName, true)) {
|
if (Theme.Load(*FileName, true)) {
|
||||||
names = (char **)realloc(names, (numThemes + 1) * sizeof(char *));
|
if (char **NewBuffer = (char **)realloc(names, (numThemes + 1) * sizeof(char *))) {
|
||||||
|
names = NewBuffer;
|
||||||
names[numThemes] = strdup(Theme.Name());
|
names[numThemes] = strdup(Theme.Name());
|
||||||
fileNames = (char **)realloc(fileNames, (numThemes + 1) * sizeof(char *));
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (char **NewBuffer = (char **)realloc(fileNames, (numThemes + 1) * sizeof(char *))) {
|
||||||
|
fileNames = NewBuffer;
|
||||||
fileNames[numThemes] = strdup(*FileName);
|
fileNames[numThemes] = strdup(*FileName);
|
||||||
descriptions = (char **)realloc(descriptions, (numThemes + 1) * sizeof(char *));
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (char **NewBuffer = (char **)realloc(descriptions, (numThemes + 1) * sizeof(char *))) {
|
||||||
|
descriptions = NewBuffer;
|
||||||
descriptions[numThemes] = strdup(Theme.Description());
|
descriptions[numThemes] = strdup(Theme.Description());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
break;
|
||||||
|
}
|
||||||
numThemes++;
|
numThemes++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
55
tools.c
55
tools.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.c 2.11 2010/12/12 23:15:38 kls Exp $
|
* $Id: tools.c 2.12 2011/02/25 14:58:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
@ -156,8 +156,14 @@ char *strreplace(char *s, const char *s1, const char *s2)
|
|||||||
int l = strlen(s);
|
int l = strlen(s);
|
||||||
int l1 = strlen(s1);
|
int l1 = strlen(s1);
|
||||||
int l2 = strlen(s2);
|
int l2 = strlen(s2);
|
||||||
if (l2 > l1)
|
if (l2 > l1) {
|
||||||
s = (char *)realloc(s, l + l2 - l1 + 1);
|
if (char *NewBuffer = (char *)realloc(s, l + l2 - l1 + 1))
|
||||||
|
s = NewBuffer;
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
char *sof = s + of;
|
char *sof = s + of;
|
||||||
if (l2 != l1)
|
if (l2 != l1)
|
||||||
memmove(sof + l2, sof + l1, l - of - l1 + 1);
|
memmove(sof + l2, sof + l1, l - of - l1 + 1);
|
||||||
@ -819,8 +825,15 @@ const char *cCharSetConv::Convert(const char *From, char *To, size_t ToLength)
|
|||||||
size_t FromLength = strlen(From);
|
size_t FromLength = strlen(From);
|
||||||
char *ToPtr = To;
|
char *ToPtr = To;
|
||||||
if (!ToPtr) {
|
if (!ToPtr) {
|
||||||
length = max(length, FromLength * 2); // some reserve to avoid later reallocations
|
int NewLength = max(length, FromLength * 2); // some reserve to avoid later reallocations
|
||||||
result = (char *)realloc(result, length);
|
if (char *NewBuffer = (char *)realloc(result, NewLength)) {
|
||||||
|
length = NewLength;
|
||||||
|
result = NewBuffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
return From;
|
||||||
|
}
|
||||||
ToPtr = result;
|
ToPtr = result;
|
||||||
ToLength = length;
|
ToLength = length;
|
||||||
}
|
}
|
||||||
@ -836,8 +849,15 @@ const char *cCharSetConv::Convert(const char *From, char *To, size_t ToLength)
|
|||||||
// The result buffer is too small, so increase it:
|
// The result buffer is too small, so increase it:
|
||||||
size_t d = ToPtr - result;
|
size_t d = ToPtr - result;
|
||||||
size_t r = length / 2;
|
size_t r = length / 2;
|
||||||
length += r;
|
int NewLength = length + r;
|
||||||
Converted = result = (char *)realloc(result, length);
|
if (char *NewBuffer = (char *)realloc(result, NewLength)) {
|
||||||
|
length = NewLength;
|
||||||
|
Converted = result = NewBuffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
return From;
|
||||||
|
}
|
||||||
ToLength += r;
|
ToLength += r;
|
||||||
ToPtr = result + d;
|
ToPtr = result + d;
|
||||||
}
|
}
|
||||||
@ -1029,15 +1049,22 @@ static boolean JpegCompressEmptyOutputBuffer(j_compress_ptr cinfo)
|
|||||||
tJpegCompressData *jcd = (tJpegCompressData *)cinfo->client_data;
|
tJpegCompressData *jcd = (tJpegCompressData *)cinfo->client_data;
|
||||||
if (jcd) {
|
if (jcd) {
|
||||||
int Used = jcd->size;
|
int Used = jcd->size;
|
||||||
jcd->size += JPEGCOMPRESSMEM;
|
int NewSize = jcd->size + JPEGCOMPRESSMEM;
|
||||||
jcd->mem = (uchar *)realloc(jcd->mem, jcd->size);
|
if (uchar *NewBuffer = (uchar *)realloc(jcd->mem, NewSize)) {
|
||||||
|
jcd->size = NewSize;
|
||||||
|
jcd->mem = NewBuffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (jcd->mem) {
|
if (jcd->mem) {
|
||||||
cinfo->dest->next_output_byte = jcd->mem + Used;
|
cinfo->dest->next_output_byte = jcd->mem + Used;
|
||||||
cinfo->dest->free_in_buffer = jcd->size - Used;
|
cinfo->dest->free_in_buffer = jcd->size - Used;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void JpegCompressTermDestination(j_compress_ptr cinfo)
|
static void JpegCompressTermDestination(j_compress_ptr cinfo)
|
||||||
@ -1046,8 +1073,12 @@ static void JpegCompressTermDestination(j_compress_ptr cinfo)
|
|||||||
if (jcd) {
|
if (jcd) {
|
||||||
int Used = cinfo->dest->next_output_byte - jcd->mem;
|
int Used = cinfo->dest->next_output_byte - jcd->mem;
|
||||||
if (Used < jcd->size) {
|
if (Used < jcd->size) {
|
||||||
|
if (uchar *NewBuffer = (uchar *)realloc(jcd->mem, Used)) {
|
||||||
jcd->size = Used;
|
jcd->size = Used;
|
||||||
jcd->mem = (uchar *)realloc(jcd->mem, jcd->size);
|
jcd->mem = NewBuffer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: out of memory");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
tools.h
6
tools.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.h 2.6 2010/12/12 23:15:52 kls Exp $
|
* $Id: tools.h 2.7 2011/02/25 15:05:58 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TOOLS_H
|
#ifndef __TOOLS_H
|
||||||
@ -434,6 +434,10 @@ private:
|
|||||||
{
|
{
|
||||||
if (++Index > allocated) {
|
if (++Index > allocated) {
|
||||||
data = (T *)realloc(data, Index * sizeof(T));
|
data = (T *)realloc(data, Index * sizeof(T));
|
||||||
|
if (!data) {
|
||||||
|
esyslog("ERROR: out of memory - abort!");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
for (int i = allocated; i < Index; i++)
|
for (int i = allocated; i < Index; i++)
|
||||||
data[i] = T(0);
|
data[i] = T(0);
|
||||||
allocated = Index;
|
allocated = Index;
|
||||||
|
Loading…
Reference in New Issue
Block a user