1From 3cc900f0989908f50d5544f00ede0f0236c4f350 Mon Sep 17 00:00:00 2001
2From: Nick Wellnhofer <wellnhofer@aevum.de>
3Date: Thu, 16 Feb 2023 11:50:52 +0100
4Subject: [PATCH] encoding: Cast toupper argument to unsigned char
5
6Fixes undefined behavior.
7
8Also cast return value explicitly to fix implicit-integer-sign-change
9checks.
10
11Reference:https://github.com/GNOME/libxml2/commit/3cc900f0989908f50d5544f00ede0f0236c4f350
12Conflict:NA
13---
14 encoding.c | 10 +++++-----
15 1 file changed, 5 insertions(+), 5 deletions(-)
16
17diff --git a/encoding.c b/encoding.c
18index 8b98f7d..d43361a 100644
19--- a/encoding.c
20+++ b/encoding.c
21@@ -1038,7 +1038,7 @@ xmlGetEncodingAlias(const char *alias) {
22 	return(NULL);
23 
24     for (i = 0;i < 99;i++) {
25-        upper[i] = toupper(alias[i]);
26+        upper[i] = (char) toupper((unsigned char) alias[i]);
27 	if (upper[i] == 0) break;
28     }
29     upper[i] = 0;
30@@ -1073,7 +1073,7 @@ xmlAddEncodingAlias(const char *name, const char *alias) {
31 	return(-1);
32 
33     for (i = 0;i < 99;i++) {
34-        upper[i] = toupper(alias[i]);
35+        upper[i] = (char) toupper((unsigned char) alias[i]);
36 	if (upper[i] == 0) break;
37     }
38     upper[i] = 0;
39@@ -1175,7 +1175,7 @@ xmlParseCharEncoding(const char* name)
40 	name = alias;
41 
42     for (i = 0;i < 499;i++) {
43-        upper[i] = toupper(name[i]);
44+        upper[i] = (char) toupper((unsigned char) name[i]);
45 	if (upper[i] == 0) break;
46     }
47     upper[i] = 0;
48@@ -1351,7 +1351,7 @@ xmlNewCharEncodingHandler(const char *name,
49 	return(NULL);
50     }
51     for (i = 0;i < 499;i++) {
52-        upper[i] = toupper(name[i]);
53+        upper[i] = (char) toupper((unsigned char) name[i]);
54 	if (upper[i] == 0) break;
55     }
56     upper[i] = 0;
57@@ -1689,7 +1689,7 @@ xmlFindCharEncodingHandler(const char *name) {
58      * Check first for directly registered encoding names
59      */
60     for (i = 0;i < 99;i++) {
61-        upper[i] = toupper(name[i]);
62+        upper[i] = (char) toupper((unsigned char) name[i]);
63 	if (upper[i] == 0) break;
64     }
65     upper[i] = 0;
66-- 
672.27.0
68
69