Always set errno to ENOMEM after malloc failed (as workaround).
Our malloc sometimes forget to set errno, f.e. for size overflow case.
This commit is contained in:
parent
57473ad215
commit
cb9772d882
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=101490
@ -327,11 +327,10 @@ static char *_errowner = "Message Catalog System";
|
||||
}
|
||||
|
||||
#define NOSPACE() { \
|
||||
saverr = errno; \
|
||||
(void)fclose(cat->fp); \
|
||||
(void)fprintf(stderr, "%s: no more memory.", _errowner); \
|
||||
free(cat); \
|
||||
errno = saverr; \
|
||||
errno = ENOMEM; \
|
||||
return (NLERR); \
|
||||
}
|
||||
|
||||
@ -364,8 +363,10 @@ loadCat(catpath)
|
||||
off_t nextSet;
|
||||
int saverr;
|
||||
|
||||
if ((cat = (MCCatT *)malloc(sizeof(MCCatT))) == NULL)
|
||||
if ((cat = (MCCatT *)malloc(sizeof(MCCatT))) == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (NLERR);
|
||||
}
|
||||
cat->loadType = MCLoadBySet;
|
||||
|
||||
if ((cat->fp = fopen(catpath, "r")) == NULL) {
|
||||
@ -425,9 +426,7 @@ loadCat(catpath)
|
||||
int res;
|
||||
|
||||
if ((res = loadSet(cat, set)) <= 0) {
|
||||
saverr = errno;
|
||||
__nls_free_resources(cat, i);
|
||||
errno = saverr;
|
||||
if (res < 0)
|
||||
NOSPACE();
|
||||
CORRUPT();
|
||||
@ -458,8 +457,10 @@ loadSet(cat, set)
|
||||
/* Get the data */
|
||||
if (fseeko(cat->fp, set->data.off, SEEK_SET) == -1)
|
||||
return (0);
|
||||
if ((set->data.str = malloc(set->dataLen)) == NULL)
|
||||
if ((set->data.str = malloc(set->dataLen)) == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (fread(set->data.str, set->dataLen, 1, cat->fp) != 1) {
|
||||
saverr = errno;
|
||||
free(set->data.str);
|
||||
@ -476,9 +477,8 @@ loadSet(cat, set)
|
||||
}
|
||||
if ((set->u.msgs = (MCMsgT *)malloc(sizeof(MCMsgT) * set->numMsgs)) ==
|
||||
NULL) {
|
||||
saverr = errno;
|
||||
free(set->data.str);
|
||||
errno = saverr;
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user