diff options
Diffstat (limited to 'Build/source/texk/dvipdfmx/dvipdfmx-20110311-PATCHES/patch-07-surrogates')
-rw-r--r-- | Build/source/texk/dvipdfmx/dvipdfmx-20110311-PATCHES/patch-07-surrogates | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110311-PATCHES/patch-07-surrogates b/Build/source/texk/dvipdfmx/dvipdfmx-20110311-PATCHES/patch-07-surrogates deleted file mode 100644 index 22c547b19aa..00000000000 --- a/Build/source/texk/dvipdfmx/dvipdfmx-20110311-PATCHES/patch-07-surrogates +++ /dev/null @@ -1,44 +0,0 @@ - Handle UTP-16 surrogates for UCS-4 supplementary planes. - -diff -ur dvipdfmx-20110311.orig/src/pdfdev.c dvipdfmx-20110311/src/pdfdev.c ---- dvipdfmx-20110311.orig/src/pdfdev.c 2012-01-17 19:27:40.000000000 +0100 -+++ dvipdfmx-20110311/src/pdfdev.c 2012-03-05 13:44:30.000000000 +0100 -@@ -960,17 +960,32 @@ - } - length *= 4; - } else if (ctype == 2) { -+ int len = 0; -+ - if (length * 2 >= FORMAT_BUF_SIZE) { - WARN("Too long string..."); - return -1; - } -- for (i = 0; i < length; i += 2) { -- sbuf1[i*2 ] = font->ucs_group; -- sbuf1[i*2+1] = font->ucs_plane; -- sbuf1[i*2+2] = p[i]; -- sbuf1[i*2+3] = p[i+1]; -+ for (i = 0; i < length; i += 2, len += 4) { -+ sbuf1[len ] = font->ucs_group; -+ if ((p[i] & 0xf8) == 0xd8) { -+ int c; -+ /* Check for valid surrogate pair. */ -+ if ((p[i] & 0xfc) != 0xd8 || i + 2 >= length || (p[i+2] & 0xfc) != 0xdc) { -+ WARN("Invalid surrogate p[%d]=%02X...", i, p[i]); -+ return -1; -+ } -+ c = (((p[i] & 0x03) << 10) | (p[i+1] << 2) | (p[i+2] & 0x03)) + 0x100; -+ sbuf1[len+1] = (c >> 8) & 0xff; -+ sbuf1[len+2] = c & 0xff; -+ i += 2; -+ } else { -+ sbuf1[len+1] = font->ucs_plane; -+ sbuf1[len+2] = p[i]; -+ } -+ sbuf1[len+3] = p[i+1]; - } -- length *= 2; -+ length = len; - } - p = sbuf1; - } else if (ctype == 1 && font->mapc >= 0) { |