summaryrefslogtreecommitdiff
path: root/x11/qt3-libs/patches/patch-ar
blob: 24ba3c43901c98518cacc0e4ac1f39b3929326e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$NetBSD: patch-ar,v 1.1 2007/04/06 12:44:38 markd Exp $

--- src/tools/qstring.cpp
+++ src/tools/qstring.cpp
@@ -5805,6 +5805,7 @@
     result.setLength( len ); // worst case
     QChar *qch = (QChar *)result.unicode();
     uint uc = 0;
+    uint min_uc = 0;
     int need = 0;
     int error = -1;
     uchar ch;
@@ -5822,6 +5823,12 @@
 			unsigned short low = uc%0x400 + 0xdc00;
 			*qch++ = QChar(high);
 			*qch++ = QChar(low);
+		    } else if (uc < min_uc || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
+			// overlong seqence, UTF16 surrogate or BOM
+                        i = error;
+                        qch = addOne(qch, result);
+                        *qch++ = QChar(0xdbff);
+                        *qch++ = QChar(0xde00+((uchar)utf8[i]));
 		    } else {
 			*qch++ = uc;
 		    }
@@ -5844,14 +5851,17 @@
 		uc = ch & 0x1f;
 		need = 1;
 		error = i;
+		min_uc = 0x80;
 	    } else if ((ch & 0xf0) == 0xe0) {
 		uc = ch & 0x0f;
 		need = 2;
 		error = i;
+		min_uc = 0x800;
 	    } else if ((ch&0xf8) == 0xf0) {
 		uc = ch & 0x07;
 		need = 3;
 		error = i;
+		min_uc = 0x10000;
 	    } else {
 	        // Error
                 qch = addOne(qch, result);