diff options
Diffstat (limited to 'src/plugins/dvi_extractor.c')
-rw-r--r-- | src/plugins/dvi_extractor.c | 76 |
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) |