Browse code

fixed major issue in UTF conversion for pdf preclass

Kevin Lin authored on 2015/03/28 02:20:03
Showing 1 changed files
... ...
@@ -76,7 +76,6 @@ char *pdf_convert_utf(char *begin, size_t sz)
76 76
 {
77 77
     char *res=NULL;
78 78
     char *buf, *outbuf;
79
-    size_t sz2;
80 79
 #if HAVE_ICONV
81 80
     char *p1, *p2;
82 81
     size_t inlen, outlen, i;
... ...
@@ -87,15 +86,15 @@ char *pdf_convert_utf(char *begin, size_t sz)
87 87
     iconv_t cd;
88 88
 #endif
89 89
 
90
-    buf = cli_calloc(1, sz);
90
+    buf = cli_calloc(1, sz+1);
91 91
     if (!(buf))
92 92
         return NULL;
93
+    memcpy(buf, begin, sz);
93 94
 
94 95
 #if HAVE_ICONV
95
-    //memcpy(buf, begin, sz);
96 96
     p1 = buf;
97 97
 
98
-    p2 = outbuf = cli_calloc(1, sz2+1);
98
+    p2 = outbuf = cli_calloc(1, sz+1);
99 99
     if (!(outbuf)) {
100 100
         free(buf);
101 101
         return NULL;
... ...
@@ -104,7 +103,7 @@ char *pdf_convert_utf(char *begin, size_t sz)
104 104
     for (i=0; encodings[i] != NULL; i++) {
105 105
         p1 = buf;
106 106
         p2 = outbuf;
107
-        inlen = outlen = sz2;
107
+        inlen = outlen = sz;
108 108
 
109 109
         cd = iconv_open("UTF-8", encodings[i]);
110 110
         if (cd == (iconv_t)(-1)) {
... ...
@@ -114,20 +113,20 @@ char *pdf_convert_utf(char *begin, size_t sz)
114 114
 
115 115
         iconv(cd, (char **)(&p1), &inlen, &p2, &outlen);
116 116
 
117
-        if (outlen == sz2) {
117
+        if (outlen == sz) {
118 118
             /* Decoding unsuccessful right from the start */
119 119
             iconv_close(cd);
120 120
             continue;
121 121
         }
122 122
 
123
-        outbuf[sz2 - outlen] = '\0';
123
+        outbuf[sz - outlen] = '\0';
124 124
 
125 125
         res = strdup(outbuf);
126 126
         iconv_close(cd);
127 127
         break;
128 128
     }
129 129
 #else
130
-    outbuf = cli_utf16_to_utf8(buf, sz2, UTF16_BOM);
130
+    outbuf = cli_utf16_to_utf8(buf, sz, UTF16_BOM);
131 131
     if (!outbuf) {
132 132
         free(buf);
133 133
         return NULL;