aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/dvi_extractor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/dvi_extractor.c')
-rw-r--r--src/plugins/dvi_extractor.c76
1 files changed, 43 insertions, 33 deletions
diff --git a/src/plugins/dvi_extractor.c b/src/plugins/dvi_extractor.c
index a62da0d..9f7c8ff 100644
--- a/src/plugins/dvi_extractor.c
+++ b/src/plugins/dvi_extractor.c
@@ -71,16 +71,23 @@ parseZZZ (const char *data,
71 slen++; 71 slen++;
72 slen = slen - pos; 72 slen = slen - pos;
73 value = malloc (slen + 1); 73 value = malloc (slen + 1);
74 value[slen] = '\0'; 74 if (value != NULL)
75 memcpy (value, &data[pos], slen); 75 {
76 if (0 != proc (proc_cls, 76 value[slen] = '\0';
77 "dvi", 77 memcpy (value, &data[pos], slen);
78 tmap[i].type, 78 if (0 != proc (proc_cls,
79 EXTRACTOR_METAFORMAT_C_STRING, 79 "dvi",
80 "text/plain", 80 tmap[i].type,
81 value, 81 EXTRACTOR_METAFORMAT_C_STRING,
82 strlen (value) +1)) 82 "text/plain",
83 return 1; 83 value,
84 strlen (value) +1))
85 {
86 free (value);
87 return 1;
88 }
89 free (value);
90 }
84 pos += slen + 1; 91 pos += slen + 1;
85 } 92 }
86 } 93 }
@@ -119,8 +126,8 @@ EXTRACTOR_dvi_extract (const unsigned char *data,
119{ 126{
120 unsigned int klen; 127 unsigned int klen;
121 char *comment; 128 char *comment;
122 unsigned int pos; 129 uint32_t pos;
123 unsigned int opos; 130 uint32_t opos;
124 unsigned int len; 131 unsigned int len;
125 unsigned int pageCount; 132 unsigned int pageCount;
126 char pages[16]; 133 char pages[16];
@@ -153,7 +160,7 @@ EXTRACTOR_dvi_extract (const unsigned char *data,
153 pos = ntohl (getIntAt (&data[opos + 1])); 160 pos = ntohl (getIntAt (&data[opos + 1]));
154 while (1) 161 while (1)
155 { 162 {
156 if (pos == (unsigned int) -1) 163 if (pos == UINT32_MAX)
157 break; 164 break;
158 if (pos + 45 > size) 165 if (pos + 45 > size)
159 return 0; 166 return 0;
@@ -162,7 +169,7 @@ EXTRACTOR_dvi_extract (const unsigned char *data,
162 pageCount++; 169 pageCount++;
163 opos = pos; 170 opos = pos;
164 pos = ntohl (getIntAt (&data[opos + 41])); 171 pos = ntohl (getIntAt (&data[opos + 41]));
165 if (pos == (unsigned int) -1) 172 if (pos == UINT32_MAX)
166 break; 173 break;
167 if (pos >= opos) 174 if (pos >= opos)
168 return 0; /* invalid! */ 175 return 0; /* invalid! */
@@ -171,35 +178,38 @@ EXTRACTOR_dvi_extract (const unsigned char *data,
171 snprintf (pages, sizeof(pages), "%u", pageCount); 178 snprintf (pages, sizeof(pages), "%u", pageCount);
172 if (0 != proc (proc_cls, 179 if (0 != proc (proc_cls,
173 "dvi", 180 "dvi",
174 EXTRACTOR_METATYPE_MIMETYPE, 181 EXTRACTOR_METATYPE_PAGE_COUNT,
175 EXTRACTOR_METAFORMAT_UTF8, 182 EXTRACTOR_METAFORMAT_UTF8,
176 "text/plain", 183 "text/plain",
177 "application/x-dvi", 184 pages,
178 strlen ("application/x-dvi") +1)) 185 strlen (pages) +1))
179 return 1; 186 return 1;
180 comment = malloc (klen + 1);
181 comment[klen] = '\0';
182 memcpy (comment, &data[15], klen);
183 if (0 != proc (proc_cls, 187 if (0 != proc (proc_cls,
184 "dvi", 188 "dvi",
185 EXTRACTOR_METATYPE_COMMENT, 189 EXTRACTOR_METATYPE_MIMETYPE,
186 EXTRACTOR_METAFORMAT_UTF8, 190 EXTRACTOR_METAFORMAT_UTF8,
187 "text/plain", 191 "text/plain",
188 comment, 192 "application/x-dvi",
189 strlen (comment) +1)) 193 strlen ("application/x-dvi") +1))
194 return 1;
195 comment = malloc (klen + 1);
196 if (comment != NULL)
190 { 197 {
198 comment[klen] = '\0';
199 memcpy (comment, &data[15], klen);
200 if (0 != proc (proc_cls,
201 "dvi",
202 EXTRACTOR_METATYPE_COMMENT,
203 EXTRACTOR_METAFORMAT_UTF8,
204 "text/plain",
205 comment,
206 strlen (comment) +1))
207 {
208 free (comment);
209 return 1;
210 }
191 free (comment); 211 free (comment);
192 return 1;
193 } 212 }
194 free (comment);
195 if (0 != proc (proc_cls,
196 "dvi",
197 EXTRACTOR_METATYPE_PAGE_COUNT,
198 EXTRACTOR_METAFORMAT_UTF8,
199 "text/plain",
200 pages,
201 strlen (pages) +1))
202 return 1;
203 /* try to find PDF/ps special */ 213 /* try to find PDF/ps special */
204 pos = opos; 214 pos = opos;
205 while (pos < size - 100) 215 while (pos < size - 100)