153aa9179Sopenharmony_ciFrom 1c5e1fc194a661783d4bffbfd4b4424a7d74881f Mon Sep 17 00:00:00 2001
253aa9179Sopenharmony_ciFrom: Nick Wellnhofer <wellnhofer@aevum.de>
353aa9179Sopenharmony_ciDate: Tue, 14 Feb 2023 13:56:21 +0100
453aa9179Sopenharmony_ciSubject: [PATCH] malloc-fail: Check for malloc failure in
553aa9179Sopenharmony_ci xmlFindCharEncodingHandler
653aa9179Sopenharmony_ci
753aa9179Sopenharmony_ciDon't return encoding handlers with a NULL name.
853aa9179Sopenharmony_ci
953aa9179Sopenharmony_ciFound with libFuzzer, see #344.
1053aa9179Sopenharmony_ci
1153aa9179Sopenharmony_ciReference:https://github.com/GNOME/libxml2/commit/1c5e1fc194a661783d4bffbfd4b4424a7d74881f
1253aa9179Sopenharmony_ciConflict:NA
1353aa9179Sopenharmony_ci---
1453aa9179Sopenharmony_ci encoding.c | 12 ++++++++++++
1553aa9179Sopenharmony_ci 1 file changed, 12 insertions(+)
1653aa9179Sopenharmony_ci
1753aa9179Sopenharmony_cidiff --git a/encoding.c b/encoding.c
1853aa9179Sopenharmony_ciindex c073a9c..400e860 100644
1953aa9179Sopenharmony_ci--- a/encoding.c
2053aa9179Sopenharmony_ci+++ b/encoding.c
2153aa9179Sopenharmony_ci@@ -1726,6 +1726,12 @@ xmlFindCharEncodingHandler(const char *name) {
2253aa9179Sopenharmony_ci 	    }
2353aa9179Sopenharmony_ci             memset(enc, 0, sizeof(xmlCharEncodingHandler));
2453aa9179Sopenharmony_ci 	    enc->name = xmlMemStrdup(name);
2553aa9179Sopenharmony_ci+            if (enc->name == NULL) {
2653aa9179Sopenharmony_ci+                xmlFree(enc);
2753aa9179Sopenharmony_ci+                iconv_close(icv_in);
2853aa9179Sopenharmony_ci+                iconv_close(icv_out);
2953aa9179Sopenharmony_ci+                return(NULL);
3053aa9179Sopenharmony_ci+            }
3153aa9179Sopenharmony_ci 	    enc->input = NULL;
3253aa9179Sopenharmony_ci 	    enc->output = NULL;
3353aa9179Sopenharmony_ci 	    enc->iconv_in = icv_in;
3453aa9179Sopenharmony_ci@@ -1758,6 +1764,12 @@ xmlFindCharEncodingHandler(const char *name) {
3553aa9179Sopenharmony_ci 	    }
3653aa9179Sopenharmony_ci             memset(encu, 0, sizeof(xmlCharEncodingHandler));
3753aa9179Sopenharmony_ci 	    encu->name = xmlMemStrdup(name);
3853aa9179Sopenharmony_ci+            if (encu->name == NULL) {
3953aa9179Sopenharmony_ci+                xmlFree(encu);
4053aa9179Sopenharmony_ci+                closeIcuConverter(ucv_in);
4153aa9179Sopenharmony_ci+                closeIcuConverter(ucv_out);
4253aa9179Sopenharmony_ci+                return(NULL);
4353aa9179Sopenharmony_ci+            }
4453aa9179Sopenharmony_ci 	    encu->input = NULL;
4553aa9179Sopenharmony_ci 	    encu->output = NULL;
4653aa9179Sopenharmony_ci 	    encu->uconv_in = ucv_in;
4753aa9179Sopenharmony_ci-- 
4853aa9179Sopenharmony_ci2.27.0
4953aa9179Sopenharmony_ci
50