libxml2/backport-malloc-fail-Handle-malloc-failures-in-xmlAddEncoding.patch
2024-05-06 16:53:04 +08:00

97 lines
3.1 KiB
Diff

From db21cd5db9c8f0fdb041febc66aef889375aae32 Mon Sep 17 00:00:00 2001
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Tue, 6 Jun 2023 14:25:30 +0200
Subject: [PATCH] malloc-fail: Handle malloc failures in xmlAddEncodingAlias
Avoid memory errors if an allocation fails.
See #344. Fixes #553.
Reference:https://github.com/GNOME/libxml2/commit/db21cd5db9c8f0fdb041febc66aef889375aae32
Conflict:NA
---
encoding.c | 44 +++++++++++++++++++++++++++++---------------
1 file changed, 29 insertions(+), 15 deletions(-)
diff --git a/encoding.c b/encoding.c
index 9a7a611..c84e71c 100644
--- a/encoding.c
+++ b/encoding.c
@@ -1068,6 +1068,7 @@ int
xmlAddEncodingAlias(const char *name, const char *alias) {
int i;
char upper[100];
+ char *nameCopy, *aliasCopy;
if ((name == NULL) || (alias == NULL))
return(-1);
@@ -1078,19 +1079,21 @@ xmlAddEncodingAlias(const char *name, const char *alias) {
}
upper[i] = 0;
- if (xmlCharEncodingAliases == NULL) {
- xmlCharEncodingAliasesNb = 0;
- xmlCharEncodingAliasesMax = 20;
- xmlCharEncodingAliases = (xmlCharEncodingAliasPtr)
- xmlMalloc(xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));
- if (xmlCharEncodingAliases == NULL)
- return(-1);
- } else if (xmlCharEncodingAliasesNb >= xmlCharEncodingAliasesMax) {
- xmlCharEncodingAliasesMax *= 2;
- xmlCharEncodingAliases = (xmlCharEncodingAliasPtr)
- xmlRealloc(xmlCharEncodingAliases,
- xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));
+ if (xmlCharEncodingAliasesNb >= xmlCharEncodingAliasesMax) {
+ xmlCharEncodingAliasPtr tmp;
+ size_t newSize = xmlCharEncodingAliasesMax ?
+ xmlCharEncodingAliasesMax * 2 :
+ 20;
+
+ tmp = (xmlCharEncodingAliasPtr)
+ xmlRealloc(xmlCharEncodingAliases,
+ newSize * sizeof(xmlCharEncodingAlias));
+ if (tmp == NULL)
+ return(-1);
+ xmlCharEncodingAliases = tmp;
+ xmlCharEncodingAliasesMax = newSize;
}
+
/*
* Walk down the list looking for a definition of the alias
*/
@@ -1099,16 +1102,27 @@ xmlAddEncodingAlias(const char *name, const char *alias) {
/*
* Replace the definition.
*/
+ nameCopy = xmlMemStrdup(name);
+ if (nameCopy == NULL)
+ return(-1);
xmlFree((char *) xmlCharEncodingAliases[i].name);
- xmlCharEncodingAliases[i].name = xmlMemStrdup(name);
+ xmlCharEncodingAliases[i].name = nameCopy;
return(0);
}
}
/*
* Add the definition
*/
- xmlCharEncodingAliases[xmlCharEncodingAliasesNb].name = xmlMemStrdup(name);
- xmlCharEncodingAliases[xmlCharEncodingAliasesNb].alias = xmlMemStrdup(upper);
+ nameCopy = xmlMemStrdup(name);
+ if (nameCopy == NULL)
+ return(-1);
+ aliasCopy = xmlMemStrdup(upper);
+ if (aliasCopy == NULL) {
+ xmlFree(nameCopy);
+ return(-1);
+ }
+ xmlCharEncodingAliases[xmlCharEncodingAliasesNb].name = nameCopy;
+ xmlCharEncodingAliases[xmlCharEncodingAliasesNb].alias = aliasCopy;
xmlCharEncodingAliasesNb++;
return(0);
}
--
2.33.0