1 /*-
2 * Copyright (c) 2003-2007 Tim Kientzle
3 * Copyright (c) 2011 Andres Mejia
4 * Copyright (c) 2011-2012 Michihiro NAKAJIMA
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 #include "test.h"
28
29 #include <locale.h>
30
DEFINE_TEST(test_read_format_rar_set_format)31 DEFINE_TEST(test_read_format_rar_set_format)
32 {
33 struct archive *a;
34 struct archive_entry *ae;
35 const char reffile[] = "test_read_format_rar.rar";
36
37 extract_reference_file(reffile);
38 assert((a = archive_read_new()) != NULL);
39 assertA(0 == archive_read_support_filter_all(a));
40 assertA(0 == archive_read_set_format(a, ARCHIVE_FORMAT_RAR));
41 assertA(0 == archive_read_open_filename(a, reffile, 10240));
42 assertA(0 == archive_read_next_header(a, &ae));
43 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
44 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
45 }
46
DEFINE_TEST(test_read_format_rar_basic)47 DEFINE_TEST(test_read_format_rar_basic)
48 {
49 char buff[64];
50 const char reffile[] = "test_read_format_rar.rar";
51 const char test_txt[] = "test text document\r\n";
52 int size = sizeof(test_txt)-1;
53 struct archive_entry *ae;
54 struct archive *a;
55
56 extract_reference_file(reffile);
57 assert((a = archive_read_new()) != NULL);
58 assertA(0 == archive_read_support_filter_all(a));
59 assertA(0 == archive_read_support_format_all(a));
60 assertA(0 == archive_read_open_filename(a, reffile, 10240));
61
62 /* First header. */
63 assertA(0 == archive_read_next_header(a, &ae));
64 assertEqualString("test.txt", archive_entry_pathname(ae));
65 assertA((int)archive_entry_mtime(ae));
66 assertA((int)archive_entry_ctime(ae));
67 assertA((int)archive_entry_atime(ae));
68 assertEqualInt(20, archive_entry_size(ae));
69 assertEqualInt(33188, archive_entry_mode(ae));
70 assertA(size == archive_read_data(a, buff, size));
71 assertEqualMem(buff, test_txt, size);
72 assertEqualInt(archive_entry_is_encrypted(ae), 0);
73 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
74
75 /* Second header. */
76 assertA(0 == archive_read_next_header(a, &ae));
77 assertEqualString("testlink", archive_entry_pathname(ae));
78 assertA((int)archive_entry_mtime(ae));
79 assertA((int)archive_entry_ctime(ae));
80 assertA((int)archive_entry_atime(ae));
81 assertEqualInt(0, archive_entry_size(ae));
82 assertEqualInt(41471, archive_entry_mode(ae));
83 assertEqualString("test.txt", archive_entry_symlink(ae));
84 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
85 assertEqualInt(archive_entry_is_encrypted(ae), 0);
86 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
87
88 /* Third header. */
89 assertA(0 == archive_read_next_header(a, &ae));
90 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
91 assertA((int)archive_entry_mtime(ae));
92 assertA((int)archive_entry_ctime(ae));
93 assertA((int)archive_entry_atime(ae));
94 assertEqualInt(20, archive_entry_size(ae));
95 assertEqualInt(33188, archive_entry_mode(ae));
96 assertA(size == archive_read_data(a, buff, size));
97 assertEqualMem(buff, test_txt, size);
98 assertEqualInt(archive_entry_is_encrypted(ae), 0);
99 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
100
101 /* Fourth header. */
102 assertA(0 == archive_read_next_header(a, &ae));
103 assertEqualString("testdir", archive_entry_pathname(ae));
104 assertA((int)archive_entry_mtime(ae));
105 assertA((int)archive_entry_ctime(ae));
106 assertA((int)archive_entry_atime(ae));
107 assertEqualInt(0, archive_entry_size(ae));
108 assertEqualInt(16877, archive_entry_mode(ae));
109 assertEqualInt(archive_entry_is_encrypted(ae), 0);
110 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
111
112 /* Fifth header. */
113 assertA(0 == archive_read_next_header(a, &ae));
114 assertEqualString("testemptydir", archive_entry_pathname(ae));
115 assertA((int)archive_entry_mtime(ae));
116 assertA((int)archive_entry_ctime(ae));
117 assertA((int)archive_entry_atime(ae));
118 assertEqualInt(0, archive_entry_size(ae));
119 assertEqualInt(16877, archive_entry_mode(ae));
120 assertEqualInt(archive_entry_is_encrypted(ae), 0);
121 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
122
123 /* Test EOF */
124 assertA(1 == archive_read_next_header(a, &ae));
125 assertEqualInt(5, archive_file_count(a));
126 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
127 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
128 }
129
DEFINE_TEST(test_read_format_rar_subblock)130 DEFINE_TEST(test_read_format_rar_subblock)
131 {
132 char buff[64];
133 const char reffile[] = "test_read_format_rar_subblock.rar";
134 const char test_txt[] = "test text document\r\n";
135 int size = sizeof(test_txt)-1;
136 struct archive_entry *ae;
137 struct archive *a;
138
139 extract_reference_file(reffile);
140 assert((a = archive_read_new()) != NULL);
141 assertA(0 == archive_read_support_filter_all(a));
142 assertA(0 == archive_read_support_format_all(a));
143 assertA(0 == archive_read_open_filename(a, reffile, 10240));
144
145 /* First header. */
146 assertA(0 == archive_read_next_header(a, &ae));
147 assertEqualString("test.txt", archive_entry_pathname(ae));
148 assertA((int)archive_entry_mtime(ae));
149 assertA((int)archive_entry_ctime(ae));
150 assertA((int)archive_entry_atime(ae));
151 assertEqualInt(20, archive_entry_size(ae));
152 assertEqualInt(33188, archive_entry_mode(ae));
153 assertA(size == archive_read_data(a, buff, size));
154 assertEqualMem(buff, test_txt, size);
155 assertEqualInt(archive_entry_is_encrypted(ae), 0);
156 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
157
158 /* Test EOF */
159 assertA(1 == archive_read_next_header(a, &ae));
160 assertEqualInt(1, archive_file_count(a));
161 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
162 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
163 }
164
DEFINE_TEST(test_read_format_rar_noeof)165 DEFINE_TEST(test_read_format_rar_noeof)
166 {
167 char buff[64];
168 const char reffile[] = "test_read_format_rar_noeof.rar";
169 const char test_txt[] = "test text document\r\n";
170 int size = sizeof(test_txt)-1;
171 struct archive_entry *ae;
172 struct archive *a;
173
174 extract_reference_file(reffile);
175 assert((a = archive_read_new()) != NULL);
176 assertA(0 == archive_read_support_filter_all(a));
177 assertA(0 == archive_read_support_format_all(a));
178 assertA(0 == archive_read_open_filename(a, reffile, 10240));
179
180 /* First header. */
181 assertA(0 == archive_read_next_header(a, &ae));
182 assertEqualString("test.txt", archive_entry_pathname(ae));
183 assertA((int)archive_entry_mtime(ae));
184 assertA((int)archive_entry_ctime(ae));
185 assertA((int)archive_entry_atime(ae));
186 assertEqualInt(20, archive_entry_size(ae));
187 assertEqualInt(33188, archive_entry_mode(ae));
188 assertA(size == archive_read_data(a, buff, size));
189 assertEqualMem(buff, test_txt, size);
190 assertEqualInt(archive_entry_is_encrypted(ae), 0);
191 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
192
193 /* Test EOF */
194 assertA(1 == archive_read_next_header(a, &ae));
195 assertEqualInt(1, archive_file_count(a));
196 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
197 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
198 }
199
DEFINE_TEST(test_read_format_rar_unicode_UTF8)200 DEFINE_TEST(test_read_format_rar_unicode_UTF8)
201 {
202 char buff[30];
203 const char reffile[] = "test_read_format_rar_unicode.rar";
204 const char test_txt[] = "kanji";
205 struct archive_entry *ae;
206 struct archive *a;
207
208 if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
209 skipping("en_US.UTF-8 locale not available on this system.");
210 return;
211 }
212
213 extract_reference_file(reffile);
214 assert((a = archive_read_new()) != NULL);
215 assertA(0 == archive_read_support_filter_all(a));
216 assertA(0 == archive_read_support_format_all(a));
217 #if defined(_WIN32) && !defined(__CYGWIN__)
218 /* Windows will use OEMCP as default, but the file is UTF-8. */
219 if (ARCHIVE_OK != archive_read_set_options(a, "rar:hdrcharset=UTF-8")) {
220 skipping("This system cannot read input as UTF-8.");
221 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
222 return;
223 }
224 #endif
225 assertA(0 == archive_read_open_filename(a, reffile, 10240));
226
227 /* First header. */
228 assertA(0 == archive_read_next_header(a, &ae));
229 #if defined(__APPLE__)
230 #define f1name "\xE8\xA1\xA8\xE3\x81\x9F\xE3\x82\x99\xE3\x82\x88/"\
231 "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x95\xE3\x82\xA9"\
232 "\xE3\x83\xAB\xE3\x82\xBF\xE3\x82\x99/\xE6\x96\xB0\xE8\xA6\x8F"\
233 "\xE3\x83\x86\xE3\x82\xAD\xE3\x82\xB9\xE3\x83\x88 "\
234 "\xE3\x83\x88\xE3\x82\x99\xE3\x82\xAD\xE3\x83\xA5\xE3\x83\xA1"\
235 "\xE3\x83\xB3\xE3\x83\x88.txt" /* NFD */
236 #else
237 #define f1name "\xE8\xA1\xA8\xE3\x81\xA0\xE3\x82\x88/"\
238 "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x95\xE3\x82\xA9"\
239 "\xE3\x83\xAB\xE3\x83\x80/\xE6\x96\xB0\xE8\xA6\x8F"\
240 "\xE3\x83\x86\xE3\x82\xAD\xE3\x82\xB9\xE3\x83\x88 "\
241 "\xE3\x83\x89\xE3\x82\xAD\xE3\x83\xA5\xE3\x83\xA1"\
242 "\xE3\x83\xB3\xE3\x83\x88.txt" /* NFC */
243 #endif
244 assertEqualUTF8String(f1name, archive_entry_pathname(ae));
245 assertA((int)archive_entry_mtime(ae));
246 assertEqualInt(0, archive_entry_size(ae));
247 assertEqualInt(33188, archive_entry_mode(ae));
248
249 /* Second header. */
250 assertA(0 == archive_read_next_header(a, &ae));
251 #if defined(__APPLE__)
252 #define f2name "\xE8\xA1\xA8\xE3\x81\x9F\xE3\x82\x99\xE3\x82\x88/"\
253 "\xE6\xBC\xA2\xE5\xAD\x97\xE9\x95\xB7\xE3\x81\x84\xE3\x83\x95"\
254 "\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE5\x90\x8Dlong-filename-in-"\
255 "\xE6\xBC\xA2\xE5\xAD\x97.txt" /* NFD */
256 #else
257 #define f2name "\xE8\xA1\xA8\xE3\x81\xA0\xE3\x82\x88/"\
258 "\xE6\xBC\xA2\xE5\xAD\x97\xE9\x95\xB7\xE3\x81\x84\xE3\x83\x95"\
259 "\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE5\x90\x8Dlong-filename-in-"\
260 "\xE6\xBC\xA2\xE5\xAD\x97.txt" /* NFC */
261 #endif
262 assertEqualUTF8String(f2name, archive_entry_pathname(ae));
263 assertA((int)archive_entry_mtime(ae));
264 assertEqualInt(5, archive_entry_size(ae));
265 assertEqualInt(33188, archive_entry_mode(ae));
266 assertEqualIntA(a, 5, archive_read_data(a, buff, 5));
267 assertEqualMem(buff, test_txt, 5);
268 assertEqualInt(archive_entry_is_encrypted(ae), 0);
269 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
270
271 /* Third header. */
272 assertA(0 == archive_read_next_header(a, &ae));
273 #if defined(__APPLE__)
274 #define f3name "\xE8\xA1\xA8\xE3\x81\x9F\xE3\x82\x99\xE3\x82\x88/"\
275 "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x95\xE3\x82"\
276 "\xA9\xE3\x83\xAB\xE3\x82\xBF\xE3\x82\x99" /* NFD */
277 #else
278 #define f3name "\xE8\xA1\xA8\xE3\x81\xA0\xE3\x82\x88/"\
279 "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x95\xE3\x82"\
280 "\xA9\xE3\x83\xAB\xE3\x83\x80" /* NFC */
281 #endif
282 assertEqualUTF8String(f3name, archive_entry_pathname(ae));
283 assertA((int)archive_entry_mtime(ae));
284 assertEqualInt(0, archive_entry_size(ae));
285 assertEqualInt(16877, archive_entry_mode(ae));
286
287 /* Fourth header. */
288 assertA(0 == archive_read_next_header(a, &ae));
289 #if defined(__APPLE__)
290 #define f4name "\xE8\xA1\xA8\xE3\x81\x9F\xE3\x82\x99\xE3\x82\x88" /* NFD */
291 #else
292 #define f4name "\xE8\xA1\xA8\xE3\x81\xA0\xE3\x82\x88" /* NFC */
293 #endif
294 assertEqualUTF8String(f4name, archive_entry_pathname(ae));
295 assertA((int)archive_entry_mtime(ae));
296 assertEqualInt(0, archive_entry_size(ae));
297 assertEqualInt(16877, archive_entry_mode(ae));
298
299 /* Fifth header, which has a symbolic-link name in multi-byte characters. */
300 assertA(0 == archive_read_next_header(a, &ae));
301 #if defined(__APPLE__)
302 #define f5name "\xE8\xA1\xA8\xE3\x81\x9F\xE3\x82\x99\xE3\x82\x88/"\
303 "\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB" /* NFD */
304 #else
305 #define f5name "\xE8\xA1\xA8\xE3\x81\xA0\xE3\x82\x88/"\
306 "\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB" /* NFC */
307 #endif
308 assertEqualUTF8String(f5name, archive_entry_pathname(ae));
309 assertEqualUTF8String(
310 "\xE6\xBC\xA2\xE5\xAD\x97\xE9\x95\xB7\xE3\x81\x84\xE3\x83\x95"
311 "\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE5\x90\x8Dlong-filename-in-"
312 "\xE6\xBC\xA2\xE5\xAD\x97.txt", archive_entry_symlink(ae));
313 assertA((int)archive_entry_mtime(ae));
314 assertEqualInt(0, archive_entry_size(ae));
315 assertEqualInt(41453, archive_entry_mode(ae));
316 assertEqualInt(archive_entry_is_encrypted(ae), 0);
317 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
318 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
319
320 /* Sixth header */
321 assertA(0 == archive_read_next_header(a, &ae));
322 assertEqualUTF8String(
323 "abcdefghijklmnopqrs\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88.txt",
324 archive_entry_pathname(ae));
325 assertA((int)archive_entry_mtime(ae));
326 assertEqualInt(16, archive_entry_size(ae));
327 assertEqualInt(33204, archive_entry_mode(ae));
328 assertEqualInt(archive_entry_is_encrypted(ae), 0);
329 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
330 assertEqualIntA(a, 16, archive_read_data(a, buff, sizeof(buff)));
331
332 /* Test EOF */
333 assertA(1 == archive_read_next_header(a, &ae));
334 assertEqualInt(6, archive_file_count(a));
335 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
336 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
337 }
338
DEFINE_TEST(test_read_format_rar_unicode_CP932)339 DEFINE_TEST(test_read_format_rar_unicode_CP932)
340 {
341 char buff[30];
342 const char reffile[] = "test_read_format_rar_unicode.rar";
343 const char test_txt[] = "kanji";
344 struct archive_entry *ae;
345 struct archive *a;
346
347 if (NULL == setlocale(LC_ALL, "Japanese_Japan") &&
348 NULL == setlocale(LC_ALL, "ja_JP.SJIS")) {
349 skipping("CP932 locale not available on this system.");
350 return;
351 }
352
353 extract_reference_file(reffile);
354 assert((a = archive_read_new()) != NULL);
355 assertA(0 == archive_read_support_filter_all(a));
356 assertA(0 == archive_read_support_format_all(a));
357 /* Specify the charset of symbolic-link file name. */
358 if (ARCHIVE_OK != archive_read_set_options(a, "rar:hdrcharset=UTF-8")) {
359 skipping("This system cannot convert character-set"
360 " from UTF-8 to CP932.");
361 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
362 return;
363 }
364 assertA(0 == archive_read_open_filename(a, reffile, 10240));
365
366 /* First header. */
367 assertA(0 == archive_read_next_header(a, &ae));
368 assertEqualString("\x95\x5c\x82\xbe\x82\xe6/\x90\x56\x82\xb5\x82\xa2"
369 "\x83\x74\x83\x48\x83\x8b\x83\x5f/\x90\x56\x8b\x4b\x83\x65\x83\x4c"
370 "\x83\x58\x83\x67 \x83\x68\x83\x4c\x83\x85\x83\x81\x83\x93\x83\x67.txt",
371 archive_entry_pathname(ae));
372 assertA((int)archive_entry_mtime(ae));
373 assertEqualInt(0, archive_entry_size(ae));
374 assertEqualInt(33188, archive_entry_mode(ae));
375 assertEqualInt(archive_entry_is_encrypted(ae), 0);
376 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
377
378 /* Second header. */
379 assertA(0 == archive_read_next_header(a, &ae));
380 assertEqualString("\x95\x5c\x82\xbe\x82\xe6/\x8a\xbf\x8e\x9a"
381 "\x92\xb7\x82\xa2\x83\x74\x83\x40\x83\x43\x83\x8b\x96\xbc\x6c"
382 "\x6f\x6e\x67\x2d\x66\x69\x6c\x65\x6e\x61\x6d\x65\x2d\x69\x6e"
383 "\x2d\x8a\xbf\x8e\x9a.txt", archive_entry_pathname(ae));
384 assertA((int)archive_entry_mtime(ae));
385 assertEqualInt(5, archive_entry_size(ae));
386 assertEqualInt(33188, archive_entry_mode(ae));
387 assertEqualInt(archive_entry_is_encrypted(ae), 0);
388 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
389 assertA(5 == archive_read_data(a, buff, 5));
390 assertEqualMem(buff, test_txt, 5);
391
392 /* Third header. */
393 assertA(0 == archive_read_next_header(a, &ae));
394 assertEqualString("\x95\x5c\x82\xbe\x82\xe6/"
395 "\x90\x56\x82\xb5\x82\xa2\x83\x74\x83\x48\x83\x8b\x83\x5f",
396 archive_entry_pathname(ae));
397 assertA((int)archive_entry_mtime(ae));
398 assertEqualInt(0, archive_entry_size(ae));
399 assertEqualInt(16877, archive_entry_mode(ae));
400 assertEqualInt(archive_entry_is_encrypted(ae), 0);
401 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
402
403 /* Fourth header. */
404 assertA(0 == archive_read_next_header(a, &ae));
405 assertEqualString("\x95\x5c\x82\xbe\x82\xe6", archive_entry_pathname(ae));
406 assertA((int)archive_entry_mtime(ae));
407 assertEqualInt(0, archive_entry_size(ae));
408 assertEqualInt(16877, archive_entry_mode(ae));
409 assertEqualInt(archive_entry_is_encrypted(ae), 0);
410 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
411
412 /* Fifth header, which has a symbolic-link name in multi-byte characters. */
413 assertA(0 == archive_read_next_header(a, &ae));
414 assertEqualString("\x95\x5c\x82\xbe\x82\xe6/"
415 "\x83\x74\x83\x40\x83\x43\x83\x8B", archive_entry_pathname(ae));
416 assertEqualString("\x8a\xbf\x8e\x9a"
417 "\x92\xb7\x82\xa2\x83\x74\x83\x40\x83\x43\x83\x8b\x96\xbc\x6c"
418 "\x6f\x6e\x67\x2d\x66\x69\x6c\x65\x6e\x61\x6d\x65\x2d\x69\x6e"
419 "\x2d\x8a\xbf\x8e\x9a.txt", archive_entry_symlink(ae));
420 assertA((int)archive_entry_mtime(ae));
421 assertEqualInt(0, archive_entry_size(ae));
422 assertEqualInt(41453, archive_entry_mode(ae));
423 assertEqualInt(archive_entry_is_encrypted(ae), 0);
424 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
425 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
426
427 /* Sixth header */
428 assertA(0 == archive_read_next_header(a, &ae));
429 assertEqualUTF8String(
430 "abcdefghijklmnopqrs\x83\x65\x83\x58\x83\x67.txt",
431 archive_entry_pathname(ae));
432 assertA((int)archive_entry_mtime(ae));
433 assertEqualInt(16, archive_entry_size(ae));
434 assertEqualInt(33204, archive_entry_mode(ae));
435 assertEqualInt(archive_entry_is_encrypted(ae), 0);
436 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
437 assertEqualIntA(a, 16, archive_read_data(a, buff, sizeof(buff)));
438
439 /* Test EOF */
440 assertA(1 == archive_read_next_header(a, &ae));
441 assertEqualInt(6, archive_file_count(a));
442 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
443 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
444 }
445
DEFINE_TEST(test_read_format_rar_compress_normal)446 DEFINE_TEST(test_read_format_rar_compress_normal)
447 {
448 const char reffile[] = "test_read_format_rar_compress_normal.rar";
449 char file1_buff[20111];
450 int file1_size = sizeof(file1_buff);
451 const char file1_test_txt[] = "<P STYLE=\"margin-bottom: 0in\"><BR>\n"
452 "</P>\n"
453 "</BODY>\n"
454 "</HTML>";
455 char file2_buff[20];
456 int file2_size = sizeof(file2_buff);
457 const char file2_test_txt[] = "test text document\r\n";
458 struct archive_entry *ae;
459 struct archive *a;
460
461 extract_reference_file(reffile);
462 assert((a = archive_read_new()) != NULL);
463 assertA(0 == archive_read_support_filter_all(a));
464 assertA(0 == archive_read_support_format_all(a));
465 assertA(0 == archive_read_open_filename(a, reffile, 10240));
466
467 /* First header. */
468 assertA(0 == archive_read_next_header(a, &ae));
469 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
470 assertA((int)archive_entry_mtime(ae));
471 assertA((int)archive_entry_ctime(ae));
472 assertA((int)archive_entry_atime(ae));
473 assertEqualInt(file1_size, archive_entry_size(ae));
474 assertEqualInt(33188, archive_entry_mode(ae));
475 assertEqualInt(archive_entry_is_encrypted(ae), 0);
476 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
477 assertA(file1_size == archive_read_data(a, file1_buff, file1_size));
478 assertEqualMem(&file1_buff[file1_size - sizeof(file1_test_txt) + 1],
479 file1_test_txt, sizeof(file1_test_txt) - 1);
480
481 /* Second header. */
482 assertA(0 == archive_read_next_header(a, &ae));
483 assertEqualString("testlink", archive_entry_pathname(ae));
484 assertA((int)archive_entry_mtime(ae));
485 assertA((int)archive_entry_ctime(ae));
486 assertA((int)archive_entry_atime(ae));
487 assertEqualInt(0, archive_entry_size(ae));
488 assertEqualInt(41471, archive_entry_mode(ae));
489 assertEqualInt(archive_entry_is_encrypted(ae), 0);
490 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
491 assertEqualString("LibarchiveAddingTest.html", archive_entry_symlink(ae));
492 assertEqualIntA(a, 0, archive_read_data(a, file1_buff, 30));
493
494 /* Third header. */
495 assertA(0 == archive_read_next_header(a, &ae));
496 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
497 assertA((int)archive_entry_mtime(ae));
498 assertA((int)archive_entry_ctime(ae));
499 assertA((int)archive_entry_atime(ae));
500 assertEqualInt(file2_size, archive_entry_size(ae));
501 assertEqualInt(33188, archive_entry_mode(ae));
502 assertEqualInt(archive_entry_is_encrypted(ae), 0);
503 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
504 assertA(file2_size == archive_read_data(a, file2_buff, file2_size));
505 assertEqualMem(&file2_buff[file2_size + 1 - sizeof(file2_test_txt)],
506 file2_test_txt, sizeof(file2_test_txt) - 1);
507
508 /* Fourth header. */
509 assertA(0 == archive_read_next_header(a, &ae));
510 assertEqualString("testdir/LibarchiveAddingTest.html",
511 archive_entry_pathname(ae));
512 assertA((int)archive_entry_mtime(ae));
513 assertA((int)archive_entry_ctime(ae));
514 assertA((int)archive_entry_atime(ae));
515 assertEqualInt(file1_size, archive_entry_size(ae));
516 assertEqualInt(33188, archive_entry_mode(ae));
517 assertEqualInt(archive_entry_is_encrypted(ae), 0);
518 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
519 assertA(file1_size == archive_read_data(a, file1_buff, file1_size));
520 assertEqualMem(&file1_buff[file1_size - sizeof(file1_test_txt) + 1],
521 file1_test_txt, sizeof(file1_test_txt) - 1);
522
523 /* Fifth header. */
524 assertA(0 == archive_read_next_header(a, &ae));
525 assertEqualString("testdir", archive_entry_pathname(ae));
526 assertA((int)archive_entry_mtime(ae));
527 assertA((int)archive_entry_ctime(ae));
528 assertA((int)archive_entry_atime(ae));
529 assertEqualInt(0, archive_entry_size(ae));
530 assertEqualInt(16877, archive_entry_mode(ae));
531 assertEqualInt(archive_entry_is_encrypted(ae), 0);
532 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
533
534 /* Sixth header. */
535 assertA(0 == archive_read_next_header(a, &ae));
536 assertEqualString("testemptydir", archive_entry_pathname(ae));
537 assertA((int)archive_entry_mtime(ae));
538 assertA((int)archive_entry_ctime(ae));
539 assertA((int)archive_entry_atime(ae));
540 assertEqualInt(0, archive_entry_size(ae));
541 assertEqualInt(16877, archive_entry_mode(ae));
542 assertEqualInt(archive_entry_is_encrypted(ae), 0);
543 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
544
545 /* Test EOF */
546 assertA(1 == archive_read_next_header(a, &ae));
547 assertEqualInt(6, archive_file_count(a));
548 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
549 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
550 }
551
552 /* This test is for sufficiently large files that would have been compressed
553 * using multiple lzss blocks.
554 */
DEFINE_TEST(test_read_format_rar_multi_lzss_blocks)555 DEFINE_TEST(test_read_format_rar_multi_lzss_blocks)
556 {
557 const char reffile[] = "test_read_format_rar_multi_lzss_blocks.rar";
558 const char test_txt[] = "-bottom: 0in\"><BR>\n</P>\n</BODY>\n</HTML>";
559 int size = 20131111, offset = 0;
560 char buff[64];
561 struct archive_entry *ae;
562 struct archive *a;
563
564 extract_reference_file(reffile);
565 assert((a = archive_read_new()) != NULL);
566 assertA(0 == archive_read_support_filter_all(a));
567 assertA(0 == archive_read_support_format_all(a));
568 assertA(0 == archive_read_open_filename(a, reffile, 10240));
569
570 /* First header. */
571 assertA(0 == archive_read_next_header(a, &ae));
572 assertEqualString("multi_lzss_blocks_test.txt", archive_entry_pathname(ae));
573 assertA((int)archive_entry_mtime(ae));
574 assertA((int)archive_entry_ctime(ae));
575 assertA((int)archive_entry_atime(ae));
576 assertEqualInt(size, archive_entry_size(ae));
577 assertEqualInt(33188, archive_entry_mode(ae));
578 assertEqualInt(archive_entry_is_encrypted(ae), 0);
579 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
580 while (offset + (int)sizeof(buff) < size)
581 {
582 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
583 offset += sizeof(buff);
584 }
585 assertA(size - offset == archive_read_data(a, buff, size - offset));
586 assertEqualMem(buff, test_txt, size - offset);
587
588 /* Test EOF */
589 assertA(1 == archive_read_next_header(a, &ae));
590 assertEqualInt(1, archive_file_count(a));
591 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
592 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
593 }
594
DEFINE_TEST(test_read_format_rar3_lowdist_reset)595 DEFINE_TEST(test_read_format_rar3_lowdist_reset)
596 {
597 const char reffile[] = "test_read_format_rar3_lowdist_reset.rar";
598 const unsigned char expected[] = {
599 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
600 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
601 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
602 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
603 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
604 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x0d, 0x0e,
605 0x0f, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e,
606 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36
607 };
608 unsigned char buff[sizeof(expected)];
609 struct archive_entry *ae;
610 struct archive *a;
611
612 extract_reference_file(reffile);
613 assert((a = archive_read_new()) != NULL);
614 assertA(0 == archive_read_support_filter_all(a));
615 assertA(0 == archive_read_support_format_rar(a));
616 assertA(0 == archive_read_open_filename(a, reffile, 10240));
617
618 assertA(0 == archive_read_next_header(a, &ae));
619 assertEqualString("lowdist-reset.bin", archive_entry_pathname(ae));
620 assertEqualInt(sizeof(expected), archive_entry_size(ae));
621 assertEqualIntA(a, sizeof(expected),
622 archive_read_data(a, buff, sizeof(buff)));
623 assertEqualMem(buff, expected, sizeof(expected));
624
625 assertA(1 == archive_read_next_header(a, &ae));
626 assertEqualInt(1, archive_file_count(a));
627 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
628 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
629 }
630
DEFINE_TEST(test_read_format_rar_compress_best)631 DEFINE_TEST(test_read_format_rar_compress_best)
632 {
633 const char reffile[] = "test_read_format_rar_compress_best.rar";
634 char file1_buff[20111];
635 int file1_size = sizeof(file1_buff);
636 const char file1_test_txt[] = "<P STYLE=\"margin-bottom: 0in\"><BR>\n"
637 "</P>\n"
638 "</BODY>\n"
639 "</HTML>";
640 char file2_buff[20];
641 int file2_size = sizeof(file2_buff);
642 const char file2_test_txt[] = "test text document\r\n";
643 struct archive_entry *ae;
644 struct archive *a;
645
646 extract_reference_file(reffile);
647 assert((a = archive_read_new()) != NULL);
648 assertA(0 == archive_read_support_filter_all(a));
649 assertA(0 == archive_read_support_format_all(a));
650 assertA(0 == archive_read_open_filename(a, reffile, 10240));
651
652 /* First header. */
653 assertA(0 == archive_read_next_header(a, &ae));
654 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
655 assertA((int)archive_entry_mtime(ae));
656 assertA((int)archive_entry_ctime(ae));
657 assertA((int)archive_entry_atime(ae));
658 assertEqualInt(file1_size, archive_entry_size(ae));
659 assertEqualInt(33188, archive_entry_mode(ae));
660 assertEqualInt(archive_entry_is_encrypted(ae), 0);
661 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
662 assertA(file1_size == archive_read_data(a, file1_buff, file1_size));
663 assertEqualMem(&file1_buff[file1_size - sizeof(file1_test_txt) + 1],
664 file1_test_txt, sizeof(file1_test_txt) - 1);
665
666 /* Second header. */
667 assertA(0 == archive_read_next_header(a, &ae));
668 assertEqualString("testlink", archive_entry_pathname(ae));
669 assertA((int)archive_entry_mtime(ae));
670 assertA((int)archive_entry_ctime(ae));
671 assertA((int)archive_entry_atime(ae));
672 assertEqualInt(0, archive_entry_size(ae));
673 assertEqualInt(41471, archive_entry_mode(ae));
674 assertEqualInt(archive_entry_is_encrypted(ae), 0);
675 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
676 assertEqualString("LibarchiveAddingTest.html", archive_entry_symlink(ae));
677 assertEqualIntA(a, 0, archive_read_data(a, file1_buff, 30));
678
679 /* Third header. */
680 assertA(0 == archive_read_next_header(a, &ae));
681 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
682 assertA((int)archive_entry_mtime(ae));
683 assertA((int)archive_entry_ctime(ae));
684 assertA((int)archive_entry_atime(ae));
685 assertEqualInt(file2_size, archive_entry_size(ae));
686 assertEqualInt(33188, archive_entry_mode(ae));
687 assertEqualInt(archive_entry_is_encrypted(ae), 0);
688 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
689 assertA(file2_size == archive_read_data(a, file2_buff, file2_size));
690 assertEqualMem(&file2_buff[file2_size + 1 - sizeof(file2_test_txt)],
691 file2_test_txt, sizeof(file2_test_txt) - 1);
692
693 /* Fourth header. */
694 assertA(0 == archive_read_next_header(a, &ae));
695 assertEqualString("testdir/LibarchiveAddingTest.html",
696 archive_entry_pathname(ae));
697 assertA((int)archive_entry_mtime(ae));
698 assertA((int)archive_entry_ctime(ae));
699 assertA((int)archive_entry_atime(ae));
700 assertEqualInt(file1_size, archive_entry_size(ae));
701 assertEqualInt(33188, archive_entry_mode(ae));
702 assertEqualInt(archive_entry_is_encrypted(ae), 0);
703 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
704 assertA(file1_size == archive_read_data(a, file1_buff, file1_size));
705 assertEqualMem(&file1_buff[file1_size - sizeof(file1_test_txt) + 1],
706 file1_test_txt, sizeof(file1_test_txt) - 1);
707
708 /* Fifth header. */
709 assertA(0 == archive_read_next_header(a, &ae));
710 assertEqualString("testdir", archive_entry_pathname(ae));
711 assertA((int)archive_entry_mtime(ae));
712 assertA((int)archive_entry_ctime(ae));
713 assertA((int)archive_entry_atime(ae));
714 assertEqualInt(0, archive_entry_size(ae));
715 assertEqualInt(16877, archive_entry_mode(ae));
716 assertEqualInt(archive_entry_is_encrypted(ae), 0);
717 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
718
719 /* Sixth header. */
720 assertA(0 == archive_read_next_header(a, &ae));
721 assertEqualString("testemptydir", archive_entry_pathname(ae));
722 assertA((int)archive_entry_mtime(ae));
723 assertA((int)archive_entry_ctime(ae));
724 assertA((int)archive_entry_atime(ae));
725 assertEqualInt(0, archive_entry_size(ae));
726 assertEqualInt(16877, archive_entry_mode(ae));
727 assertEqualInt(archive_entry_is_encrypted(ae), 0);
728 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
729
730 /* Test EOF */
731 assertA(1 == archive_read_next_header(a, &ae));
732 assertEqualInt(6, archive_file_count(a));
733 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
734 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
735 }
736
737 /* This is a test for RAR files compressed using a technique where compression
738 * switches back and forth to and from ppmd and lzss decoding.
739 */
DEFINE_TEST(test_read_format_rar_ppmd_lzss_conversion)740 DEFINE_TEST(test_read_format_rar_ppmd_lzss_conversion)
741 {
742 const char reffile[] = "test_read_format_rar_ppmd_lzss_conversion.rar";
743 const char test_txt[] = "gin-bottom: 0in\"><BR>\n</P>\n</BODY>\n</HTML>";
744 int size = 241647978, offset = 0;
745 char buff[64];
746 struct archive_entry *ae;
747 struct archive *a;
748
749 extract_reference_file(reffile);
750 assert((a = archive_read_new()) != NULL);
751 assertA(0 == archive_read_support_filter_all(a));
752 assertA(0 == archive_read_support_format_all(a));
753 assertA(0 == archive_read_open_filename(a, reffile, 10240));
754
755 /* First header. */
756 assertA(0 == archive_read_next_header(a, &ae));
757 assertEqualString("ppmd_lzss_conversion_test.txt",
758 archive_entry_pathname(ae));
759 assertA((int)archive_entry_mtime(ae));
760 assertA((int)archive_entry_ctime(ae));
761 assertA((int)archive_entry_atime(ae));
762 assertEqualInt(size, archive_entry_size(ae));
763 assertEqualInt(33188, archive_entry_mode(ae));
764 assertEqualInt(archive_entry_is_encrypted(ae), 0);
765 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
766 while (offset + (int)sizeof(buff) < size)
767 {
768 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
769 offset += sizeof(buff);
770 }
771 assertA(size - offset == archive_read_data(a, buff, size - offset));
772 assertEqualMem(buff, test_txt, size - offset);
773
774 /* Test EOF */
775 assertA(1 == archive_read_next_header(a, &ae));
776 assertEqualInt(1, archive_file_count(a));
777 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
778 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
779 }
780
DEFINE_TEST(test_read_format_rar_binary)781 DEFINE_TEST(test_read_format_rar_binary)
782 {
783 const char reffile[] = "test_read_format_rar_binary_data.rar";
784 char *file1_buff = malloc(1048576);
785 int file1_size = 1048576;
786 const char file1_test_txt[] = "\x37\xef\xb2\xbe\x33\xf6\xcc\xcb\xee\x2a\x10"
787 "\x9d\x2e\x01\xe9\xf6\xf9\xe5\xe6\x67\x0c\x2b"
788 "\xd8\x6b\xa0\x26\x9a\xf7\x93\x87\x42\xf1\x08"
789 "\x42\xdc\x9b\x76\x91\x20\xa4\x01\xbe\x67\xbd"
790 "\x08\x74\xde\xec";
791 char file2_buff[32618];
792 int file2_size = sizeof(file2_buff);
793 const char file2_test_txt[] = "\x00\xee\x78\x00\x00\x4d\x45\x54\x41\x2d\x49"
794 "\x4e\x46\x2f\x6d\x61\x6e\x69\x66\x65\x73\x74"
795 "\x2e\x78\x6d\x6c\x50\x4b\x05\x06\x00\x00\x00"
796 "\x00\x12\x00\x12\x00\xaa\x04\x00\x00\xaa\x7a"
797 "\x00\x00\x00\x00";
798 struct archive_entry *ae;
799 struct archive *a;
800
801 extract_reference_file(reffile);
802 assert((a = archive_read_new()) != NULL);
803 assertA(0 == archive_read_support_filter_all(a));
804 assertA(0 == archive_read_support_format_all(a));
805 assertA(0 == archive_read_open_filename(a, reffile, 10240));
806
807 /* First header. */
808 assertA(0 == archive_read_next_header(a, &ae));
809 assertEqualString("random_data.bin", archive_entry_pathname(ae));
810 assertA((int)archive_entry_mtime(ae));
811 assertA((int)archive_entry_ctime(ae));
812 assertA((int)archive_entry_atime(ae));
813 assertEqualInt(file1_size, archive_entry_size(ae));
814 assertEqualInt(33188, archive_entry_mode(ae));
815 assertEqualInt(archive_entry_is_encrypted(ae), 0);
816 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
817 assertA(file1_size == archive_read_data(a, file1_buff, file1_size));
818 assertEqualMem(&file1_buff[file1_size - sizeof(file1_test_txt) + 1],
819 file1_test_txt, sizeof(file1_test_txt) - 1);
820
821 /* Second header. */
822 assertA(0 == archive_read_next_header(a, &ae));
823 assertEqualString("LibarchiveAddingTest.odt", archive_entry_pathname(ae));
824 assertA((int)archive_entry_mtime(ae));
825 assertA((int)archive_entry_ctime(ae));
826 assertA((int)archive_entry_atime(ae));
827 assertEqualInt(file2_size, archive_entry_size(ae));
828 assertEqualInt(33188, archive_entry_mode(ae));
829 assertEqualInt(archive_entry_is_encrypted(ae), 0);
830 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
831 assertA(file2_size == archive_read_data(a, file2_buff, file2_size));
832 assertEqualMem(&file2_buff[file2_size + 1 - sizeof(file2_test_txt)],
833 file2_test_txt, sizeof(file2_test_txt) - 1);
834
835 /* Test EOF */
836 assertA(1 == archive_read_next_header(a, &ae));
837 assertEqualInt(2, archive_file_count(a));
838 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
839 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
840
841 free(file1_buff);
842 }
843
DEFINE_TEST(test_read_format_rar_windows)844 DEFINE_TEST(test_read_format_rar_windows)
845 {
846 char buff[441];
847 const char reffile[] = "test_read_format_rar_windows.rar";
848 const char test_txt[] = "test text file\r\n";
849 int size = sizeof(test_txt)-1;
850 struct archive_entry *ae;
851 struct archive *a;
852
853 extract_reference_file(reffile);
854 assert((a = archive_read_new()) != NULL);
855 assertA(0 == archive_read_support_filter_all(a));
856 assertA(0 == archive_read_support_format_all(a));
857 assertA(0 == archive_read_open_filename(a, reffile, 10240));
858
859 /* First header. */
860 assertA(0 == archive_read_next_header(a, &ae));
861 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
862 assertA((int)archive_entry_mtime(ae));
863 assertA((int)archive_entry_ctime(ae));
864 assertA((int)archive_entry_atime(ae));
865 assertEqualInt(16, archive_entry_size(ae));
866 assertEqualInt(33188, archive_entry_mode(ae));
867 assertEqualInt(archive_entry_is_encrypted(ae), 0);
868 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
869 assertA(size == archive_read_data(a, buff, size));
870 assertEqualMem(buff, test_txt, size);
871
872 /* Second header. */
873 assertA(0 == archive_read_next_header(a, &ae));
874 assertEqualString("test.txt", archive_entry_pathname(ae));
875 assertA((int)archive_entry_mtime(ae));
876 assertA((int)archive_entry_ctime(ae));
877 assertA((int)archive_entry_atime(ae));
878 assertEqualInt(16, archive_entry_size(ae));
879 assertEqualInt(33188, archive_entry_mode(ae));
880 assertEqualInt(archive_entry_is_encrypted(ae), 0);
881 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
882 assertA(size == archive_read_data(a, buff, size));
883 assertEqualMem(buff, test_txt, size);
884
885 /* Third header. */
886 assertA(0 == archive_read_next_header(a, &ae));
887 assertEqualString("testshortcut.lnk", archive_entry_pathname(ae));
888 assertA((int)archive_entry_mtime(ae));
889 assertA((int)archive_entry_ctime(ae));
890 assertA((int)archive_entry_atime(ae));
891 assertEqualInt(sizeof(buff), archive_entry_size(ae));
892 assertEqualInt(33188, archive_entry_mode(ae));
893 assertEqualInt(archive_entry_is_encrypted(ae), 0);
894 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
895 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
896
897 /* Fourth header. */
898 assertA(0 == archive_read_next_header(a, &ae));
899 assertEqualString("testdir", archive_entry_pathname(ae));
900 assertA((int)archive_entry_mtime(ae));
901 assertA((int)archive_entry_ctime(ae));
902 assertA((int)archive_entry_atime(ae));
903 assertEqualInt(0, archive_entry_size(ae));
904 assertEqualInt(16877, archive_entry_mode(ae));
905 assertEqualInt(archive_entry_is_encrypted(ae), 0);
906 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
907
908 /* Fifth header. */
909 assertA(0 == archive_read_next_header(a, &ae));
910 assertEqualString("testemptydir", archive_entry_pathname(ae));
911 assertA((int)archive_entry_mtime(ae));
912 assertA((int)archive_entry_ctime(ae));
913 assertA((int)archive_entry_atime(ae));
914 assertEqualInt(0, archive_entry_size(ae));
915 assertEqualInt(16877, archive_entry_mode(ae));
916 assertEqualInt(archive_entry_is_encrypted(ae), 0);
917 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
918
919 /* Test EOF */
920 assertA(1 == archive_read_next_header(a, &ae));
921 assertEqualInt(5, archive_file_count(a));
922 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
923 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
924 }
925
926 static void
test_read_format_rar_multivolume_test_body_helper(struct archive * a)927 test_read_format_rar_multivolume_test_body_helper(struct archive *a)
928 {
929 int file1_size = 241647978, offset = 0;
930 char buff[64];
931 const char file1_test_txt[] = "gin-bottom: 0in\"><BR>\n</P>\n</BODY>\n"
932 "</HTML>";
933 char file2_buff[20111];
934 int file2_size = sizeof(file2_buff);
935 const char file2_test_txt[] = "<P STYLE=\"margin-bottom: 0in\"><BR>\n"
936 "</P>\n"
937 "</BODY>\n"
938 "</HTML>";
939 char file3_buff[20];
940 int file3_size = sizeof(file3_buff);
941 const char file3_test_txt[] = "test text document\r\n";
942 struct archive_entry *ae;
943
944 /* First header. */
945 assertA(0 == archive_read_next_header(a, &ae));
946 assertEqualString("ppmd_lzss_conversion_test.txt",
947 archive_entry_pathname(ae));
948 assertA((int)archive_entry_mtime(ae));
949 assertA((int)archive_entry_ctime(ae));
950 assertA((int)archive_entry_atime(ae));
951 assertEqualInt(file1_size, archive_entry_size(ae));
952 assertEqualInt(33188, archive_entry_mode(ae));
953 assertEqualInt(archive_entry_is_encrypted(ae), 0);
954 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
955 while (offset + (int)sizeof(buff) < file1_size)
956 {
957 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
958 offset += sizeof(buff);
959 }
960 assertA(file1_size - offset ==
961 archive_read_data(a, buff, file1_size - offset));
962 assertEqualMem(buff, file1_test_txt, file1_size - offset);
963
964 /* Second header. */
965 assertA(0 == archive_read_next_header(a, &ae));
966 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
967 assertA((int)archive_entry_mtime(ae));
968 assertA((int)archive_entry_ctime(ae));
969 assertA((int)archive_entry_atime(ae));
970 assertEqualInt(file2_size, archive_entry_size(ae));
971 assertEqualInt(33188, archive_entry_mode(ae));
972 assertEqualInt(archive_entry_is_encrypted(ae), 0);
973 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
974 assertA(file2_size == archive_read_data(a, file2_buff, file2_size));
975 assertEqualMem(&file2_buff[file2_size - sizeof(file2_test_txt) + 1],
976 file2_test_txt, sizeof(file2_test_txt) - 1);
977
978 /* Third header. */
979 assertA(0 == archive_read_next_header(a, &ae));
980 assertEqualString("testlink", archive_entry_pathname(ae));
981 assertA((int)archive_entry_mtime(ae));
982 assertA((int)archive_entry_ctime(ae));
983 assertA((int)archive_entry_atime(ae));
984 assertEqualInt(0, archive_entry_size(ae));
985 assertEqualInt(41471, archive_entry_mode(ae));
986 assertEqualInt(archive_entry_is_encrypted(ae), 0);
987 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
988 assertEqualString("LibarchiveAddingTest.html", archive_entry_symlink(ae));
989 assertEqualIntA(a, 0, archive_read_data(a, file2_buff, 30));
990
991 /* Fourth header. */
992 assertA(0 == archive_read_next_header(a, &ae));
993 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
994 assertA((int)archive_entry_mtime(ae));
995 assertA((int)archive_entry_ctime(ae));
996 assertA((int)archive_entry_atime(ae));
997 assertEqualInt(file3_size, archive_entry_size(ae));
998 assertEqualInt(33188, archive_entry_mode(ae));
999 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1000 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1001 assertA(file3_size == archive_read_data(a, file3_buff, file3_size));
1002 assertEqualMem(&file3_buff[file3_size + 1 - sizeof(file3_test_txt)],
1003 file3_test_txt, sizeof(file3_test_txt) - 1);
1004
1005 /* Fifth header. */
1006 assertA(0 == archive_read_next_header(a, &ae));
1007 assertEqualString("testdir/LibarchiveAddingTest.html",
1008 archive_entry_pathname(ae));
1009 assertA((int)archive_entry_mtime(ae));
1010 assertA((int)archive_entry_ctime(ae));
1011 assertA((int)archive_entry_atime(ae));
1012 assertEqualInt(file2_size, archive_entry_size(ae));
1013 assertEqualInt(33188, archive_entry_mode(ae));
1014 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1015 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1016 assertA(file2_size == archive_read_data(a, file2_buff, file2_size));
1017 assertEqualMem(&file2_buff[file2_size - sizeof(file2_test_txt) + 1],
1018 file2_test_txt, sizeof(file2_test_txt) - 1);
1019
1020 /* Sixth header. */
1021 assertA(0 == archive_read_next_header(a, &ae));
1022 assertEqualString("testdir", archive_entry_pathname(ae));
1023 assertA((int)archive_entry_mtime(ae));
1024 assertA((int)archive_entry_ctime(ae));
1025 assertA((int)archive_entry_atime(ae));
1026 assertEqualInt(0, archive_entry_size(ae));
1027 assertEqualInt(16877, archive_entry_mode(ae));
1028 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1029 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1030
1031 /* Seventh header. */
1032 assertA(0 == archive_read_next_header(a, &ae));
1033 assertEqualString("testemptydir", archive_entry_pathname(ae));
1034 assertA((int)archive_entry_mtime(ae));
1035 assertA((int)archive_entry_ctime(ae));
1036 assertA((int)archive_entry_atime(ae));
1037 assertEqualInt(0, archive_entry_size(ae));
1038 assertEqualInt(16877, archive_entry_mode(ae));
1039 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1040 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1041
1042 /* Test EOF */
1043 assertA(1 == archive_read_next_header(a, &ae));
1044 assertEqualInt(7, archive_file_count(a));
1045 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1046 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1047 }
1048
DEFINE_TEST(test_read_format_rar_multivolume)1049 DEFINE_TEST(test_read_format_rar_multivolume)
1050 {
1051 const char *reffiles[] =
1052 {
1053 "test_read_format_rar_multivolume.part0001.rar",
1054 "test_read_format_rar_multivolume.part0002.rar",
1055 "test_read_format_rar_multivolume.part0003.rar",
1056 "test_read_format_rar_multivolume.part0004.rar",
1057 NULL
1058 };
1059
1060 struct archive *a;
1061
1062 extract_reference_files(reffiles);
1063 assert((a = archive_read_new()) != NULL);
1064 assertA(0 == archive_read_support_filter_all(a));
1065 assertA(0 == archive_read_support_format_all(a));
1066 assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
1067
1068 test_read_format_rar_multivolume_test_body_helper(a);
1069 }
1070
1071 /* As above, but using read_open_filenames_w */
DEFINE_TEST(test_read_format_rar_multivolume_w)1072 DEFINE_TEST(test_read_format_rar_multivolume_w)
1073 {
1074 #if defined(_WIN32) && !defined(__CYGWIN__)
1075 const char *reffiles[] =
1076 {
1077 "test_read_format_rar_multivolume.part0001.rar",
1078 "test_read_format_rar_multivolume.part0002.rar",
1079 "test_read_format_rar_multivolume.part0003.rar",
1080 "test_read_format_rar_multivolume.part0004.rar",
1081 NULL
1082 };
1083
1084 const wchar_t *wreffiles[] =
1085 {
1086 L"test_read_format_rar_multivolume.part0001.rar",
1087 L"test_read_format_rar_multivolume.part0002.rar",
1088 L"test_read_format_rar_multivolume.part0003.rar",
1089 L"test_read_format_rar_multivolume.part0004.rar",
1090 NULL
1091 };
1092
1093 struct archive *a;
1094
1095 extract_reference_files(reffiles);
1096 assert((a = archive_read_new()) != NULL);
1097 assertA(0 == archive_read_support_filter_all(a));
1098 assertA(0 == archive_read_support_format_all(a));
1099 assertA(0 == archive_read_open_filenames_w(a, wreffiles, 10240));
1100
1101 test_read_format_rar_multivolume_test_body_helper(a);
1102 #else
1103 skipping("archive_read_open_filenames_w is not available on this platform");
1104 return;
1105 #endif
1106 }
1107
DEFINE_TEST(test_read_format_rar_multivolume_skip)1108 DEFINE_TEST(test_read_format_rar_multivolume_skip)
1109 {
1110 const char *reffiles[] =
1111 {
1112 "test_read_format_rar_multivolume.part0001.rar",
1113 "test_read_format_rar_multivolume.part0002.rar",
1114 "test_read_format_rar_multivolume.part0003.rar",
1115 "test_read_format_rar_multivolume.part0004.rar",
1116 NULL
1117 };
1118 int file1_size = 241647978;
1119 int file2_size = 20111;
1120 int file3_size = 20;
1121 struct archive_entry *ae;
1122 struct archive *a;
1123
1124 extract_reference_files(reffiles);
1125 assert((a = archive_read_new()) != NULL);
1126 assertA(0 == archive_read_support_filter_all(a));
1127 assertA(0 == archive_read_support_format_all(a));
1128 assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
1129
1130 /* First header. */
1131 assertA(0 == archive_read_next_header(a, &ae));
1132 assertEqualString("ppmd_lzss_conversion_test.txt",
1133 archive_entry_pathname(ae));
1134 assertA((int)archive_entry_mtime(ae));
1135 assertA((int)archive_entry_ctime(ae));
1136 assertA((int)archive_entry_atime(ae));
1137 assertEqualInt(file1_size, archive_entry_size(ae));
1138 assertEqualInt(33188, archive_entry_mode(ae));
1139 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1140 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1141
1142 /* Second header. */
1143 assertA(0 == archive_read_next_header(a, &ae));
1144 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
1145 assertA((int)archive_entry_mtime(ae));
1146 assertA((int)archive_entry_ctime(ae));
1147 assertA((int)archive_entry_atime(ae));
1148 assertEqualInt(file2_size, archive_entry_size(ae));
1149 assertEqualInt(33188, archive_entry_mode(ae));
1150 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1151 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1152
1153 /* Third header. */
1154 assertA(0 == archive_read_next_header(a, &ae));
1155 assertEqualString("testlink", archive_entry_pathname(ae));
1156 assertA((int)archive_entry_mtime(ae));
1157 assertA((int)archive_entry_ctime(ae));
1158 assertA((int)archive_entry_atime(ae));
1159 assertEqualInt(0, archive_entry_size(ae));
1160 assertEqualInt(41471, archive_entry_mode(ae));
1161 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1162 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1163 assertEqualString("LibarchiveAddingTest.html", archive_entry_symlink(ae));
1164
1165 /* Fourth header. */
1166 assertA(0 == archive_read_next_header(a, &ae));
1167 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
1168 assertA((int)archive_entry_mtime(ae));
1169 assertA((int)archive_entry_ctime(ae));
1170 assertA((int)archive_entry_atime(ae));
1171 assertEqualInt(file3_size, archive_entry_size(ae));
1172 assertEqualInt(33188, archive_entry_mode(ae));
1173 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1174 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1175
1176 /* Fifth header. */
1177 assertA(0 == archive_read_next_header(a, &ae));
1178 assertEqualString("testdir/LibarchiveAddingTest.html",
1179 archive_entry_pathname(ae));
1180 assertA((int)archive_entry_mtime(ae));
1181 assertA((int)archive_entry_ctime(ae));
1182 assertA((int)archive_entry_atime(ae));
1183 assertEqualInt(file2_size, archive_entry_size(ae));
1184 assertEqualInt(33188, archive_entry_mode(ae));
1185 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1186 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1187
1188 /* Sixth header. */
1189 assertA(0 == archive_read_next_header(a, &ae));
1190 assertEqualString("testdir", archive_entry_pathname(ae));
1191 assertA((int)archive_entry_mtime(ae));
1192 assertA((int)archive_entry_ctime(ae));
1193 assertA((int)archive_entry_atime(ae));
1194 assertEqualInt(0, archive_entry_size(ae));
1195 assertEqualInt(16877, archive_entry_mode(ae));
1196 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1197 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1198
1199 /* Seventh header. */
1200 assertA(0 == archive_read_next_header(a, &ae));
1201 assertEqualString("testemptydir", archive_entry_pathname(ae));
1202 assertA((int)archive_entry_mtime(ae));
1203 assertA((int)archive_entry_ctime(ae));
1204 assertA((int)archive_entry_atime(ae));
1205 assertEqualInt(0, archive_entry_size(ae));
1206 assertEqualInt(16877, archive_entry_mode(ae));
1207 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1208 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1209
1210 /* Test EOF */
1211 assertA(1 == archive_read_next_header(a, &ae));
1212 assertEqualInt(7, archive_file_count(a));
1213 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1214 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1215 }
1216
DEFINE_TEST(test_read_format_rar_sfx)1217 DEFINE_TEST(test_read_format_rar_sfx)
1218 {
1219 char buff[441];
1220 const char reffile[] = "test_read_format_rar_sfx.exe";
1221 const char test_txt[] = "test text file\r\n";
1222 int size = sizeof(test_txt)-1;
1223 struct archive_entry *ae;
1224 struct archive *a;
1225
1226 extract_reference_file(reffile);
1227 assert((a = archive_read_new()) != NULL);
1228 assertA(0 == archive_read_support_filter_all(a));
1229 assertA(0 == archive_read_support_format_all(a));
1230 assertA(0 == archive_read_open_filename(a, reffile, 10240));
1231
1232 /* First header. */
1233 assertA(0 == archive_read_next_header(a, &ae));
1234 assertEqualString("test.txt", archive_entry_pathname(ae));
1235 assertA((int)archive_entry_mtime(ae));
1236 assertA((int)archive_entry_ctime(ae));
1237 assertA((int)archive_entry_atime(ae));
1238 assertEqualInt(16, archive_entry_size(ae));
1239 assertEqualInt(33188, archive_entry_mode(ae));
1240 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1241 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1242 assertA(size == archive_read_data(a, buff, size));
1243 assertEqualMem(buff, test_txt, size);
1244
1245 /* Second header. */
1246 assertA(0 == archive_read_next_header(a, &ae));
1247 assertEqualString("testshortcut.lnk", archive_entry_pathname(ae));
1248 assertA((int)archive_entry_mtime(ae));
1249 assertA((int)archive_entry_ctime(ae));
1250 assertA((int)archive_entry_atime(ae));
1251 assertEqualInt(sizeof(buff), archive_entry_size(ae));
1252 assertEqualInt(33188, archive_entry_mode(ae));
1253 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1254 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1255 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1256
1257 /* Third header. */
1258 assertA(0 == archive_read_next_header(a, &ae));
1259 assertEqualString("testdir/test.txt", archive_entry_pathname(ae));
1260 assertA((int)archive_entry_mtime(ae));
1261 assertA((int)archive_entry_ctime(ae));
1262 assertA((int)archive_entry_atime(ae));
1263 assertEqualInt(16, archive_entry_size(ae));
1264 assertEqualInt(33188, archive_entry_mode(ae));
1265 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1266 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1267 assertA(size == archive_read_data(a, buff, size));
1268 assertEqualMem(buff, test_txt, size);
1269
1270 /* Fourth header. */
1271 assertA(0 == archive_read_next_header(a, &ae));
1272 assertEqualString("testdir", archive_entry_pathname(ae));
1273 assertA((int)archive_entry_mtime(ae));
1274 assertA((int)archive_entry_ctime(ae));
1275 assertA((int)archive_entry_atime(ae));
1276 assertEqualInt(0, archive_entry_size(ae));
1277 assertEqualInt(16877, archive_entry_mode(ae));
1278 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1279 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1280
1281 /* Fifth header. */
1282 assertA(0 == archive_read_next_header(a, &ae));
1283 assertEqualString("testemptydir", archive_entry_pathname(ae));
1284 assertA((int)archive_entry_mtime(ae));
1285 assertA((int)archive_entry_ctime(ae));
1286 assertA((int)archive_entry_atime(ae));
1287 assertEqualInt(0, archive_entry_size(ae));
1288 assertEqualInt(16877, archive_entry_mode(ae));
1289 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1290 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1291
1292 /* Test EOF */
1293 assertA(1 == archive_read_next_header(a, &ae));
1294 assertEqualInt(5, archive_file_count(a));
1295 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1296 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1297 }
1298
DEFINE_TEST(test_read_format_rar_multivolume_stored_file)1299 DEFINE_TEST(test_read_format_rar_multivolume_stored_file)
1300 {
1301 const char *reffiles[] =
1302 {
1303 "test_rar_multivolume_single_file.part1.rar",
1304 "test_rar_multivolume_single_file.part2.rar",
1305 "test_rar_multivolume_single_file.part3.rar",
1306 NULL
1307 };
1308 char file_buff[20111];
1309 int file_size = sizeof(file_buff);
1310 const char file_test_txt[] = "<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1311 "</P>\n"
1312 "</BODY>\n"
1313 "</HTML>";
1314 struct archive_entry *ae;
1315 struct archive *a;
1316
1317 extract_reference_files(reffiles);
1318 assert((a = archive_read_new()) != NULL);
1319 assertA(0 == archive_read_support_filter_all(a));
1320 assertA(0 == archive_read_support_format_all(a));
1321 assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
1322
1323 /* First header. */
1324 assertA(0 == archive_read_next_header(a, &ae));
1325 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
1326 assertA((int)archive_entry_mtime(ae));
1327 assertA((int)archive_entry_ctime(ae));
1328 assertA((int)archive_entry_atime(ae));
1329 assertEqualInt(file_size, archive_entry_size(ae));
1330 assertEqualInt(33188, archive_entry_mode(ae));
1331 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1332 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1333 assertA(file_size == archive_read_data(a, file_buff, file_size));
1334 assertEqualMem(&file_buff[file_size - sizeof(file_test_txt) + 1],
1335 file_test_txt, sizeof(file_test_txt) - 1);
1336
1337 /* Test EOF */
1338 assertA(1 == archive_read_next_header(a, &ae));
1339 assertEqualInt(1, archive_file_count(a));
1340 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1341 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1342 }
1343
DEFINE_TEST(test_read_format_rar_multivolume_stored_file_skip)1344 DEFINE_TEST(test_read_format_rar_multivolume_stored_file_skip)
1345 {
1346 const char *reffiles[] =
1347 {
1348 "test_rar_multivolume_single_file.part1.rar",
1349 "test_rar_multivolume_single_file.part2.rar",
1350 "test_rar_multivolume_single_file.part3.rar",
1351 NULL
1352 };
1353 int file_size = 20111;
1354 struct archive_entry *ae;
1355 struct archive *a;
1356
1357 extract_reference_files(reffiles);
1358 assert((a = archive_read_new()) != NULL);
1359 assertA(0 == archive_read_support_filter_all(a));
1360 assertA(0 == archive_read_support_format_all(a));
1361 assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
1362
1363 /* First header. */
1364 assertA(0 == archive_read_next_header(a, &ae));
1365 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
1366 assertA((int)archive_entry_mtime(ae));
1367 assertA((int)archive_entry_ctime(ae));
1368 assertA((int)archive_entry_atime(ae));
1369 assertEqualInt(file_size, archive_entry_size(ae));
1370 assertEqualInt(33188, archive_entry_mode(ae));
1371 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1372 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1373
1374 /* Test EOF */
1375 assertA(1 == archive_read_next_header(a, &ae));
1376 assertEqualInt(1, archive_file_count(a));
1377 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1378 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1379 }
1380
DEFINE_TEST(test_read_format_rar_multivolume_seek_data)1381 DEFINE_TEST(test_read_format_rar_multivolume_seek_data)
1382 {
1383 const char *reffiles[] =
1384 {
1385 "test_rar_multivolume_single_file.part1.rar",
1386 "test_rar_multivolume_single_file.part2.rar",
1387 "test_rar_multivolume_single_file.part3.rar",
1388 NULL
1389 };
1390 char buff[64];
1391 int file_size = 20111;
1392 const char file_test_txt1[] = "d. \n</P>\n<P STYLE=\"margin-bottom: 0in\">"
1393 "<BR>\n</P>\n</BODY>\n</HTML>";
1394 const char file_test_txt2[] = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4."
1395 "0 Transitional//EN\">\n<";
1396 const char file_test_txt3[] = "mplify writing such tests,\ntry to use plat"
1397 "form-independent codin";
1398 const char file_test_txt4[] = "lString</TT> in the example above)\ngenerat"
1399 "e detailed log message";
1400 const char file_test_txt5[] = "SS=\"western\">make check</TT> will usually"
1401 " run\n\tall of the tests.";
1402 struct archive_entry *ae;
1403 struct archive *a;
1404
1405 extract_reference_files(reffiles);
1406 assert((a = archive_read_new()) != NULL);
1407 assertA(0 == archive_read_support_filter_all(a));
1408 assertA(0 == archive_read_support_format_all(a));
1409 assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
1410
1411 /* First header. */
1412 assertA(0 == archive_read_next_header(a, &ae));
1413 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
1414 assertA((int)archive_entry_mtime(ae));
1415 assertA((int)archive_entry_ctime(ae));
1416 assertA((int)archive_entry_atime(ae));
1417 assertEqualInt(file_size, archive_entry_size(ae));
1418 assertEqualInt(33188, archive_entry_mode(ae));
1419 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1420 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1421
1422 /* Seek to the end minus 64 bytes */
1423 assertA(file_size - (int)sizeof(buff) ==
1424 archive_seek_data(a, file_size - (int)sizeof(buff), SEEK_SET));
1425 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1426 assertEqualMem(buff, file_test_txt1, sizeof(file_test_txt1) - 1);
1427
1428 /* Seek back to the beginning */
1429 assertA(0 == archive_seek_data(a, 0, SEEK_SET));
1430 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1431 assertEqualMem(buff, file_test_txt2, sizeof(file_test_txt2) - 1);
1432
1433 /* Seek to the middle of the combined data block */
1434 assertA(10054 == archive_seek_data(a, 10054, SEEK_SET));
1435 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1436 assertEqualMem(buff, file_test_txt3, sizeof(file_test_txt3) - 1);
1437
1438 /* Seek to 32 bytes before the end of the first data sub-block */
1439 assertA(6860 == archive_seek_data(a, 6860, SEEK_SET));
1440 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1441 assertEqualMem(buff, file_test_txt4, sizeof(file_test_txt4) - 1);
1442
1443 /* Seek to 32 bytes before the end of the second data sub-block */
1444 assertA(13752 == archive_seek_data(a, 13752, SEEK_SET));
1445 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1446 assertEqualMem(buff, file_test_txt5, sizeof(file_test_txt5) - 1);
1447
1448 /* Use various combinations of SEEK_SET, SEEK_CUR, and SEEK_END */
1449 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1450 assertEqualInt(0, archive_seek_data(a, 0, SEEK_SET));
1451 assertEqualInt(0, archive_seek_data(a, 0, SEEK_CUR));
1452 assertEqualInt(-1, archive_seek_data(a, -10, SEEK_CUR));
1453 assertEqualInt(10, archive_seek_data(a, 10, SEEK_CUR));
1454 assertEqualInt(-1, archive_seek_data(a, -20, SEEK_CUR));
1455 assertEqualInt(10, archive_seek_data(a, 0, SEEK_CUR));
1456 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1457 assertEqualInt(file_size - 20, archive_seek_data(a, -20, SEEK_END));
1458 assertEqualInt(file_size + 40, archive_seek_data(a, 40, SEEK_END));
1459 assertEqualInt(file_size + 40, archive_seek_data(a, 0, SEEK_CUR));
1460 assertEqualInt(file_size + 40 + 20, archive_seek_data(a, 20, SEEK_CUR));
1461 assertEqualInt(file_size + 40 + 20 + 20, archive_seek_data(a, 20, SEEK_CUR));
1462 assertEqualInt(file_size + 20, archive_seek_data(a, 20, SEEK_END));
1463 assertEqualInt(file_size - 20, archive_seek_data(a, -20, SEEK_END));
1464
1465 /*
1466 * Attempt to read from the end of the file. These should return
1467 * 0 for end of file.
1468 */
1469 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1470 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1471 assertEqualInt(file_size + 40, archive_seek_data(a, 40, SEEK_CUR));
1472 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1473
1474 /* Seek to the end minus 64 bytes */
1475 assertA(0 == archive_seek_data(a, 0, SEEK_SET));
1476 assertA(file_size - (int)sizeof(buff) ==
1477 archive_seek_data(a, -(int)sizeof(buff), SEEK_END));
1478 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1479 assertEqualMem(buff, file_test_txt1, sizeof(file_test_txt1) - 1);
1480
1481 /* The file position should be at the end of the file here */
1482 assertA(file_size == archive_seek_data(a, 0, SEEK_CUR));
1483
1484 /* Seek back to the beginning */
1485 assertA(0 == archive_seek_data(a, -file_size, SEEK_CUR));
1486 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1487 assertEqualMem(buff, file_test_txt2, sizeof(file_test_txt2) - 1);
1488
1489 /* Seek to the middle of the combined data block */
1490 assertA(10054 == archive_seek_data(a, 10054 - (int)sizeof(buff), SEEK_CUR));
1491 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1492 assertEqualMem(buff, file_test_txt3, sizeof(file_test_txt3) - 1);
1493
1494 /* Seek to 32 bytes before the end of the first data sub-block */
1495 assertA(6860 == archive_seek_data(a, 6860 - (10054 + (int)sizeof(buff)),
1496 SEEK_CUR));
1497 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1498 assertEqualMem(buff, file_test_txt4, sizeof(file_test_txt4) - 1);
1499
1500 /* Seek to 32 bytes before the end of the second data sub-block */
1501 assertA(13752 == archive_seek_data(a, 13752 - file_size, SEEK_END));
1502 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1503 assertEqualMem(buff, file_test_txt5, sizeof(file_test_txt5) - 1);
1504
1505 /* Test EOF */
1506 assertA(1 == archive_read_next_header(a, &ae));
1507 assertEqualInt(1, archive_file_count(a));
1508 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1509 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1510 }
1511
DEFINE_TEST(test_read_format_rar_multivolume_seek_multiple_files)1512 DEFINE_TEST(test_read_format_rar_multivolume_seek_multiple_files)
1513 {
1514 const char *reffiles[] =
1515 {
1516 "test_rar_multivolume_multiple_files.part1.rar",
1517 "test_rar_multivolume_multiple_files.part2.rar",
1518 "test_rar_multivolume_multiple_files.part3.rar",
1519 "test_rar_multivolume_multiple_files.part4.rar",
1520 "test_rar_multivolume_multiple_files.part5.rar",
1521 "test_rar_multivolume_multiple_files.part6.rar",
1522 NULL
1523 };
1524 char buff[64];
1525 int file_size = 20111;
1526 const char file_test_txt1[] = "d. \n</P>\n<P STYLE=\"margin-bottom: 0in\">"
1527 "<BR>\n</P>\n</BODY>\n</HTML>";
1528 const char file_test_txt2[] = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4."
1529 "0 Transitional//EN\">\n<";
1530 const char file_test_txt3[] = "mplify writing such tests,\ntry to use plat"
1531 "form-independent codin";
1532 const char file_test_txt4[] = "\nfailures. \n</P>\n<H1 CLASS=\"western\"><"
1533 "A NAME=\"Life_cycle_of_a_te";
1534 const char file_test_txt5[] = "LE=\"margin-bottom: 0in\">DO use runtime te"
1535 "sts for platform\n\tfeatu";
1536 const char file_test_txt6[] = "rough test suite is essential\nboth for ver"
1537 "ifying new ports and f";
1538 const char file_test_txt7[] = "m: 0in\">Creates a temporary directory\n\tw"
1539 "hose name matches the na";
1540 const char file_test_txt8[] = "lt\ninput file and verify the results. Thes"
1541 "e use <TT CLASS=\"weste";
1542 struct archive_entry *ae;
1543 struct archive *a;
1544
1545 extract_reference_files(reffiles);
1546 assert((a = archive_read_new()) != NULL);
1547 assertA(0 == archive_read_support_filter_all(a));
1548 assertA(0 == archive_read_support_format_all(a));
1549 assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
1550
1551 /* First header. */
1552 assertA(0 == archive_read_next_header(a, &ae));
1553 assertEqualString("LibarchiveAddingTest2.html", archive_entry_pathname(ae));
1554 assertA((int)archive_entry_mtime(ae));
1555 assertA((int)archive_entry_ctime(ae));
1556 assertA((int)archive_entry_atime(ae));
1557 assertEqualInt(file_size, archive_entry_size(ae));
1558 assertEqualInt(33188, archive_entry_mode(ae));
1559 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1560 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1561
1562 /* Attempt to read past end of file */
1563 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1564 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1565 assertEqualInt(file_size + 40, archive_seek_data(a, 40, SEEK_CUR));
1566 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1567
1568 /* Seek to the end minus 64 bytes */
1569 assertA(file_size - (int)sizeof(buff) ==
1570 archive_seek_data(a, -(int)sizeof(buff), SEEK_END));
1571 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1572 assertEqualMem(buff, file_test_txt1, sizeof(file_test_txt1) - 1);
1573
1574 /* Seek back to the beginning */
1575 assertA(0 == archive_seek_data(a, -file_size, SEEK_END));
1576 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1577 assertEqualMem(buff, file_test_txt2, sizeof(file_test_txt2) - 1);
1578
1579 /* Seek to the middle of the combined data block */
1580 assertA(10054 == archive_seek_data(a, 10054 - (int)sizeof(buff), SEEK_CUR));
1581 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1582 assertEqualMem(buff, file_test_txt3, sizeof(file_test_txt3) - 1);
1583
1584 /* Seek to 32 bytes before the end of the first data sub-block */
1585 assertA(7027 == archive_seek_data(a, 7027 - (10054 + (int)sizeof(buff)),
1586 SEEK_CUR));
1587 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1588 assertEqualMem(buff, file_test_txt4, sizeof(file_test_txt4) - 1);
1589
1590 /* Seek to 32 bytes before the end of the second data sub-block */
1591 assertA(14086 == archive_seek_data(a, 14086 - file_size, SEEK_END));
1592 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1593 assertEqualMem(buff, file_test_txt5, sizeof(file_test_txt5) - 1);
1594
1595 /* Attempt to read past end of file */
1596 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1597 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1598 assertEqualInt(file_size + 40, archive_seek_data(a, 40, SEEK_CUR));
1599 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1600
1601 /* Second header. */
1602 assertA(0 == archive_read_next_header(a, &ae));
1603 assertEqualString("LibarchiveAddingTest.html", archive_entry_pathname(ae));
1604 assertA((int)archive_entry_mtime(ae));
1605 assertA((int)archive_entry_ctime(ae));
1606 assertA((int)archive_entry_atime(ae));
1607 assertEqualInt(file_size, archive_entry_size(ae));
1608 assertEqualInt(33188, archive_entry_mode(ae));
1609 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1610 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1611
1612 /* Attempt to read past end of file */
1613 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1614 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1615 assertEqualInt(file_size + 40, archive_seek_data(a, 40, SEEK_CUR));
1616 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1617
1618 /* Seek to the end minus 64 bytes */
1619 assertA(file_size - (int)sizeof(buff) ==
1620 archive_seek_data(a, file_size - (int)sizeof(buff), SEEK_SET));
1621 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1622 assertEqualMem(buff, file_test_txt1, sizeof(file_test_txt1) - 1);
1623
1624 /* Seek back to the beginning */
1625 assertA(0 == archive_seek_data(a, 0, SEEK_SET));
1626 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1627 assertEqualMem(buff, file_test_txt2, sizeof(file_test_txt2) - 1);
1628
1629 /* Seek to the middle of the combined data block */
1630 assertA(10054 == archive_seek_data(a, 10054 - (int)sizeof(buff), SEEK_CUR));
1631 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1632 assertEqualMem(buff, file_test_txt3, sizeof(file_test_txt3) - 1);
1633
1634 /* Seek to 32 bytes before the end of the first data sub-block */
1635 assertA(969 == archive_seek_data(a, 969 - (10054 + (int)sizeof(buff)), SEEK_CUR));
1636 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1637 assertEqualMem(buff, file_test_txt6, sizeof(file_test_txt4) - 1);
1638
1639 /* Seek to 32 bytes before the end of the second data sub-block */
1640 assertA(8029 == archive_seek_data(a, 8029 - file_size, SEEK_END));
1641 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1642 assertEqualMem(buff, file_test_txt7, sizeof(file_test_txt5) - 1);
1643
1644 /* Seek to 32 bytes before the end of the third data sub-block */
1645 assertA(15089 == archive_seek_data(a, 15089 - file_size, SEEK_END));
1646 assertA(sizeof(buff) == archive_read_data(a, buff, sizeof(buff)));
1647 assertEqualMem(buff, file_test_txt8, sizeof(file_test_txt5) - 1);
1648
1649 /* Attempt to read past end of file */
1650 assertEqualInt(file_size, archive_seek_data(a, 0, SEEK_END));
1651 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1652 assertEqualInt(file_size + 40, archive_seek_data(a, 40, SEEK_CUR));
1653 assertA(0 == archive_read_data(a, buff, sizeof(buff)));
1654
1655 /* Test EOF */
1656 assertA(1 == archive_read_next_header(a, &ae));
1657 assertEqualInt(2, archive_file_count(a));
1658 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1659 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
1660 }
1661
1662 static void
test_read_format_rar_multivolume_uncompressed_files_helper(struct archive * a)1663 test_read_format_rar_multivolume_uncompressed_files_helper(struct archive *a)
1664 {
1665 char buff[64];
1666
1667 /* Do checks for seeks/reads past beginning and end of file */
1668 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
1669 memset(buff, 0, sizeof(buff));
1670 assertEqualIntA(a, -1, archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_SET));
1671 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_CUR));
1672 assertEqualIntA(a, (sizeof(buff)-1),
1673 archive_read_data(a, buff, (sizeof(buff)-1)));
1674 assertEqualIntA(a, (sizeof(buff)-1), archive_seek_data(a, 0, SEEK_CUR));
1675 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD "
1676 "HTML 4.0 Transitional//EN\">\n", buff);
1677 memset(buff, 0, sizeof(buff));
1678 assertEqualIntA(a, -1, archive_seek_data(a, -(((int)sizeof(buff)-1)*2), SEEK_CUR));
1679 assertEqualIntA(a, (sizeof(buff)-1), archive_seek_data(a, 0, SEEK_CUR));
1680 assertEqualIntA(a, (sizeof(buff)-1),
1681 archive_read_data(a, buff, (sizeof(buff)-1)));
1682 assertEqualIntA(a, ((sizeof(buff)-1)*2), archive_seek_data(a, 0, SEEK_CUR));
1683 assertEqualStringA(a, "<HTML>\n<HEAD>\n\t<META HTTP-EQUIV=\"CONTENT-TYPE\" "
1684 "CONTENT=\"text/ht", buff);
1685 memset(buff, 0, sizeof(buff));
1686 assertEqualIntA(a, -1, archive_seek_data(a, -(20111+32), SEEK_END));
1687 assertEqualIntA(a, ((sizeof(buff)-1)*2), archive_seek_data(a, 0, SEEK_CUR));
1688 assertEqualIntA(a, (sizeof(buff)-1),
1689 archive_read_data(a, buff, (sizeof(buff)-1)));
1690 assertEqualIntA(a, ((sizeof(buff)-1)*3), archive_seek_data(a, 0, SEEK_CUR));
1691 assertEqualStringA(a, "ml; charset=utf-8\">\n\t<TITLE></TITLE>\n\t<META "
1692 "NAME=\"GENERATOR\" CO", buff);
1693
1694 memset(buff, 0, sizeof(buff));
1695 assertEqualIntA(a, 20111, archive_seek_data(a, 20111, SEEK_SET));
1696 assertEqualIntA(a, 20111, archive_seek_data(a, 0, SEEK_CUR));
1697 assertEqualIntA(a, 0, archive_read_data(a, buff, (sizeof(buff)-1)));
1698 assertEqualIntA(a, 20111, archive_seek_data(a, 0, SEEK_CUR));
1699 assertEqualStringA(a, "", buff);
1700 memset(buff, 0, sizeof(buff));
1701 assertEqualIntA(a, 20111 + (sizeof(buff)-1),
1702 archive_seek_data(a, (sizeof(buff)-1), SEEK_CUR));
1703 assertEqualIntA(a, 0, archive_read_data(a, buff, (sizeof(buff)-1)));
1704 assertEqualIntA(a, 20111 + (sizeof(buff)-1),
1705 archive_seek_data(a, 0, SEEK_CUR));
1706 assertEqualStringA(a, "", buff);
1707 memset(buff, 0, sizeof(buff));
1708 assertEqualIntA(a, 20111 + ((sizeof(buff)-1)*2),
1709 archive_seek_data(a, ((sizeof(buff)-1)*2), SEEK_END));
1710 assertEqualIntA(a, 0, archive_read_data(a, buff, (sizeof(buff)-1)));
1711 assertEqualIntA(a, 20111 + ((sizeof(buff)-1)*2),
1712 archive_seek_data(a, 0, SEEK_CUR));
1713 assertEqualStringA(a, "", buff);
1714 }
1715
DEFINE_TEST(test_read_format_rar_multivolume_uncompressed_files)1716 DEFINE_TEST(test_read_format_rar_multivolume_uncompressed_files)
1717 {
1718 const char *reffiles[] =
1719 {
1720 "test_rar_multivolume_uncompressed_files.part01.rar",
1721 "test_rar_multivolume_uncompressed_files.part02.rar",
1722 "test_rar_multivolume_uncompressed_files.part03.rar",
1723 "test_rar_multivolume_uncompressed_files.part04.rar",
1724 "test_rar_multivolume_uncompressed_files.part05.rar",
1725 "test_rar_multivolume_uncompressed_files.part06.rar",
1726 "test_rar_multivolume_uncompressed_files.part07.rar",
1727 "test_rar_multivolume_uncompressed_files.part08.rar",
1728 "test_rar_multivolume_uncompressed_files.part09.rar",
1729 "test_rar_multivolume_uncompressed_files.part10.rar",
1730 NULL
1731 };
1732 char buff[64];
1733 ssize_t bytes_read;
1734 struct archive *a;
1735 struct archive_entry *ae;
1736
1737 extract_reference_files(reffiles);
1738 assert((a = archive_read_new()) != NULL);
1739 assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
1740 assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
1741 assertEqualIntA(a, ARCHIVE_OK,
1742 archive_read_open_filenames(a, reffiles, 10240));
1743
1744 /*
1745 * First header.
1746 */
1747 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
1748 assertEqualStringA(a, "testdir/LibarchiveAddingTest2.html",
1749 archive_entry_pathname(ae));
1750 assertA((int)archive_entry_mtime(ae));
1751 assertA((int)archive_entry_ctime(ae));
1752 assertA((int)archive_entry_atime(ae));
1753 assertEqualIntA(a, 20111, archive_entry_size(ae));
1754 assertEqualIntA(a, 33188, archive_entry_mode(ae));
1755 assertEqualInt(archive_entry_is_encrypted(ae), 0);
1756 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
1757
1758 test_read_format_rar_multivolume_uncompressed_files_helper(a);
1759
1760 /* Read from the beginning to the end of the file */
1761 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
1762 do
1763 {
1764 memset(buff, 0, sizeof(buff));
1765 bytes_read = archive_read_data(a, buff, (sizeof(buff)-1));
1766 } while (bytes_read > 0);
1767
1768 /* Seek to the end minus (sizeof(buff)-1) bytes */
1769 memset(buff, 0, sizeof(buff));
1770 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1771 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
1772 assertEqualIntA(a, (sizeof(buff)-1),
1773 archive_read_data(a, buff, (sizeof(buff)-1)));
1774 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1775 "</P>\n</BODY>\n</HTML>", buff);
1776
1777 /* Seek back to the beginning */
1778 memset(buff, 0, sizeof(buff));
1779 assertEqualIntA(a, 0, archive_seek_data(a, -20111, SEEK_END));
1780 assertEqualIntA(a, (sizeof(buff)-1),
1781 archive_read_data(a, buff, (sizeof(buff)-1)));
1782 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1783 "Transitional//EN\">\n", buff);
1784
1785 /* Test that SEEK_SET works correctly between data blocks */
1786 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
1787 memset(buff, 0, sizeof(buff));
1788 assertEqualIntA(a, 13164,
1789 archive_seek_data(a, 13164, SEEK_SET));
1790 assertEqualIntA(a, (sizeof(buff)-1),
1791 archive_read_data(a, buff, (sizeof(buff)-1)));
1792 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1793 "assertEqualMem to test equalit", buff);
1794
1795 memset(buff, 0, sizeof(buff));
1796 assertEqualIntA(a, 0,
1797 archive_seek_data(a, 0, SEEK_SET));
1798 assertEqualIntA(a, (sizeof(buff)-1),
1799 archive_read_data(a, buff, (sizeof(buff)-1)));
1800 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1801 "Transitional//EN\">\n", buff);
1802
1803 memset(buff, 0, sizeof(buff));
1804 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1805 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
1806 assertEqualIntA(a, (sizeof(buff)-1),
1807 archive_read_data(a, buff, (sizeof(buff)-1)));
1808 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1809 "</P>\n</BODY>\n</HTML>", buff);
1810
1811 memset(buff, 0, sizeof(buff));
1812 assertEqualIntA(a, 13164,
1813 archive_seek_data(a, 13164, SEEK_SET));
1814 assertEqualIntA(a, (sizeof(buff)-1),
1815 archive_read_data(a, buff, (sizeof(buff)-1)));
1816 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1817 "assertEqualMem to test equalit", buff);
1818
1819 memset(buff, 0, sizeof(buff));
1820 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1821 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
1822 assertEqualIntA(a, (sizeof(buff)-1),
1823 archive_read_data(a, buff, (sizeof(buff)-1)));
1824 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1825 "</P>\n</BODY>\n</HTML>", buff);
1826
1827 memset(buff, 0, sizeof(buff));
1828 assertEqualIntA(a, 0,
1829 archive_seek_data(a, 0, SEEK_SET));
1830 assertEqualIntA(a, (sizeof(buff)-1),
1831 archive_read_data(a, buff, (sizeof(buff)-1)));
1832 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1833 "Transitional//EN\">\n", buff);
1834
1835 memset(buff, 0, sizeof(buff));
1836 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1837 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
1838 assertEqualIntA(a, (sizeof(buff)-1),
1839 archive_read_data(a, buff, (sizeof(buff)-1)));
1840 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1841 "</P>\n</BODY>\n</HTML>", buff);
1842
1843 memset(buff, 0, sizeof(buff));
1844 assertEqualIntA(a, 13164,
1845 archive_seek_data(a, 13164, SEEK_SET));
1846 assertEqualIntA(a, (sizeof(buff)-1),
1847 archive_read_data(a, buff, (sizeof(buff)-1)));
1848 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1849 "assertEqualMem to test equalit", buff);
1850
1851 memset(buff, 0, sizeof(buff));
1852 assertEqualIntA(a, 0,
1853 archive_seek_data(a, 0, SEEK_SET));
1854 assertEqualIntA(a, (sizeof(buff)-1),
1855 archive_read_data(a, buff, (sizeof(buff)-1)));
1856 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1857 "Transitional//EN\">\n", buff);
1858
1859 /* Test that SEEK_CUR works correctly between data blocks */
1860 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
1861 memset(buff, 0, sizeof(buff));
1862 assertEqualIntA(a, 13164,
1863 archive_seek_data(a, 13164, SEEK_CUR));
1864 assertEqualIntA(a, (sizeof(buff)-1),
1865 archive_read_data(a, buff, (sizeof(buff)-1)));
1866 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1867 "assertEqualMem to test equalit", buff);
1868
1869 memset(buff, 0, sizeof(buff));
1870 assertEqualIntA(a, 0,
1871 archive_seek_data(a, -13227, SEEK_CUR));
1872 assertEqualIntA(a, (sizeof(buff)-1),
1873 archive_read_data(a, buff, (sizeof(buff)-1)));
1874 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1875 "Transitional//EN\">\n", buff);
1876
1877 memset(buff, 0, sizeof(buff));
1878 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1879 archive_seek_data(a, 19985, SEEK_CUR));
1880 assertEqualIntA(a, (sizeof(buff)-1),
1881 archive_read_data(a, buff, (sizeof(buff)-1)));
1882 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1883 "</P>\n</BODY>\n</HTML>", buff);
1884
1885 memset(buff, 0, sizeof(buff));
1886 assertEqualIntA(a, 13164,
1887 archive_seek_data(a, -6947, SEEK_CUR));
1888 assertEqualIntA(a, (sizeof(buff)-1),
1889 archive_read_data(a, buff, (sizeof(buff)-1)));
1890 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1891 "assertEqualMem to test equalit", buff);
1892
1893 memset(buff, 0, sizeof(buff));
1894 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1895 archive_seek_data(a, 6821, SEEK_CUR));
1896 assertEqualIntA(a, (sizeof(buff)-1),
1897 archive_read_data(a, buff, (sizeof(buff)-1)));
1898 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1899 "</P>\n</BODY>\n</HTML>", buff);
1900
1901 memset(buff, 0, sizeof(buff));
1902 assertEqualIntA(a, 0,
1903 archive_seek_data(a, -20111, SEEK_CUR));
1904 assertEqualIntA(a, (sizeof(buff)-1),
1905 archive_read_data(a, buff, (sizeof(buff)-1)));
1906 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1907 "Transitional//EN\">\n", buff);
1908
1909 memset(buff, 0, sizeof(buff));
1910 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1911 archive_seek_data(a, 19985, SEEK_CUR));
1912 assertEqualIntA(a, (sizeof(buff)-1),
1913 archive_read_data(a, buff, (sizeof(buff)-1)));
1914 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1915 "</P>\n</BODY>\n</HTML>", buff);
1916
1917 memset(buff, 0, sizeof(buff));
1918 assertEqualIntA(a, 13164,
1919 archive_seek_data(a, -6947, SEEK_CUR));
1920 assertEqualIntA(a, (sizeof(buff)-1),
1921 archive_read_data(a, buff, (sizeof(buff)-1)));
1922 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1923 "assertEqualMem to test equalit", buff);
1924
1925 memset(buff, 0, sizeof(buff));
1926 assertEqualIntA(a, 0,
1927 archive_seek_data(a, -13227, SEEK_CUR));
1928 assertEqualIntA(a, (sizeof(buff)-1),
1929 archive_read_data(a, buff, (sizeof(buff)-1)));
1930 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1931 "Transitional//EN\">\n", buff);
1932
1933 /* Test that SEEK_END works correctly between data blocks */
1934 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
1935 memset(buff, 0, sizeof(buff));
1936 assertEqualIntA(a, 13164,
1937 archive_seek_data(a, -6947, SEEK_END));
1938 assertEqualIntA(a, (sizeof(buff)-1),
1939 archive_read_data(a, buff, (sizeof(buff)-1)));
1940 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1941 "assertEqualMem to test equalit", buff);
1942
1943 memset(buff, 0, sizeof(buff));
1944 assertEqualIntA(a, 0,
1945 archive_seek_data(a, -20111, SEEK_END));
1946 assertEqualIntA(a, (sizeof(buff)-1),
1947 archive_read_data(a, buff, (sizeof(buff)-1)));
1948 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1949 "Transitional//EN\">\n", buff);
1950
1951 memset(buff, 0, sizeof(buff));
1952 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1953 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
1954 assertEqualIntA(a, (sizeof(buff)-1),
1955 archive_read_data(a, buff, (sizeof(buff)-1)));
1956 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1957 "</P>\n</BODY>\n</HTML>", buff);
1958
1959 memset(buff, 0, sizeof(buff));
1960 assertEqualIntA(a, 13164,
1961 archive_seek_data(a, -6947, SEEK_END));
1962 assertEqualIntA(a, (sizeof(buff)-1),
1963 archive_read_data(a, buff, (sizeof(buff)-1)));
1964 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1965 "assertEqualMem to test equalit", buff);
1966
1967 memset(buff, 0, sizeof(buff));
1968 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1969 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
1970 assertEqualIntA(a, (sizeof(buff)-1),
1971 archive_read_data(a, buff, (sizeof(buff)-1)));
1972 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1973 "</P>\n</BODY>\n</HTML>", buff);
1974
1975 memset(buff, 0, sizeof(buff));
1976 assertEqualIntA(a, 0,
1977 archive_seek_data(a, -20111, SEEK_END));
1978 assertEqualIntA(a, (sizeof(buff)-1),
1979 archive_read_data(a, buff, (sizeof(buff)-1)));
1980 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
1981 "Transitional//EN\">\n", buff);
1982
1983 memset(buff, 0, sizeof(buff));
1984 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
1985 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
1986 assertEqualIntA(a, (sizeof(buff)-1),
1987 archive_read_data(a, buff, (sizeof(buff)-1)));
1988 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
1989 "</P>\n</BODY>\n</HTML>", buff);
1990
1991 memset(buff, 0, sizeof(buff));
1992 assertEqualIntA(a, 13164,
1993 archive_seek_data(a, -6947, SEEK_END));
1994 assertEqualIntA(a, (sizeof(buff)-1),
1995 archive_read_data(a, buff, (sizeof(buff)-1)));
1996 assertEqualStringA(a, "ertEqualInt,\n\tassertEqualString, "
1997 "assertEqualMem to test equalit", buff);
1998
1999 memset(buff, 0, sizeof(buff));
2000 assertEqualIntA(a, 0,
2001 archive_seek_data(a, -20111, SEEK_END));
2002 assertEqualIntA(a, (sizeof(buff)-1),
2003 archive_read_data(a, buff, (sizeof(buff)-1)));
2004 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2005 "Transitional//EN\">\n", buff);
2006
2007 test_read_format_rar_multivolume_uncompressed_files_helper(a);
2008
2009 /*
2010 * Second header.
2011 */
2012 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
2013 assertEqualStringA(a, "testdir/testsubdir/LibarchiveAddingTest2.html",
2014 archive_entry_pathname(ae));
2015 assertA((int)archive_entry_mtime(ae));
2016 assertA((int)archive_entry_ctime(ae));
2017 assertA((int)archive_entry_atime(ae));
2018 assertEqualIntA(a, 20111, archive_entry_size(ae));
2019 assertEqualIntA(a, 33188, archive_entry_mode(ae));
2020 assertEqualInt(archive_entry_is_encrypted(ae), 0);
2021 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
2022
2023 test_read_format_rar_multivolume_uncompressed_files_helper(a);
2024
2025 /* Read from the beginning to the end of the file */
2026 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2027 do
2028 {
2029 memset(buff, 0, sizeof(buff));
2030 bytes_read = archive_read_data(a, buff, (sizeof(buff)-1));
2031 } while (bytes_read > 0);
2032
2033 /* Seek to the end minus (sizeof(buff)-1) bytes */
2034 memset(buff, 0, sizeof(buff));
2035 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2036 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2037 assertEqualIntA(a, (sizeof(buff)-1),
2038 archive_read_data(a, buff, (sizeof(buff)-1)));
2039 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2040 "</P>\n</BODY>\n</HTML>", buff);
2041
2042 /* Seek back to the beginning */
2043 memset(buff, 0, sizeof(buff));
2044 assertEqualIntA(a, 0, archive_seek_data(a, -20111, SEEK_END));
2045 assertEqualIntA(a, (sizeof(buff)-1),
2046 archive_read_data(a, buff, (sizeof(buff)-1)));
2047 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2048 "Transitional//EN\">\n", buff);
2049
2050 /* Test that SEEK_SET works correctly between data blocks */
2051 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2052 memset(buff, 0, sizeof(buff));
2053 assertEqualIntA(a, 6162,
2054 archive_seek_data(a, 6162, SEEK_SET));
2055 assertEqualIntA(a, (sizeof(buff)-1),
2056 archive_read_data(a, buff, (sizeof(buff)-1)));
2057 assertEqualStringA(a, "arguments satisfy certain conditions. "
2058 "If the assertion fails--f", buff);
2059
2060 memset(buff, 0, sizeof(buff));
2061 assertEqualIntA(a, 19347,
2062 archive_seek_data(a, 19347, SEEK_SET));
2063 assertEqualIntA(a, (sizeof(buff)-1),
2064 archive_read_data(a, buff, (sizeof(buff)-1)));
2065 assertEqualStringA(a, " when a block being written out by\n"
2066 "the archive writer is the sa", buff);
2067
2068 memset(buff, 0, sizeof(buff));
2069 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2070 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2071 assertEqualIntA(a, (sizeof(buff)-1),
2072 archive_read_data(a, buff, (sizeof(buff)-1)));
2073 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2074 "</P>\n</BODY>\n</HTML>", buff);
2075
2076 memset(buff, 0, sizeof(buff));
2077 assertEqualIntA(a, 19347,
2078 archive_seek_data(a, 19347, SEEK_SET));
2079 assertEqualIntA(a, (sizeof(buff)-1),
2080 archive_read_data(a, buff, (sizeof(buff)-1)));
2081 assertEqualStringA(a, " when a block being written out by\n"
2082 "the archive writer is the sa", buff);
2083
2084 memset(buff, 0, sizeof(buff));
2085 assertEqualIntA(a, 6162,
2086 archive_seek_data(a, 6162, SEEK_SET));
2087 assertEqualIntA(a, (sizeof(buff)-1),
2088 archive_read_data(a, buff, (sizeof(buff)-1)));
2089 assertEqualStringA(a, "arguments satisfy certain conditions. "
2090 "If the assertion fails--f", buff);
2091
2092 memset(buff, 0, sizeof(buff));
2093 assertEqualIntA(a, 0,
2094 archive_seek_data(a, 0, SEEK_SET));
2095 assertEqualIntA(a, (sizeof(buff)-1),
2096 archive_read_data(a, buff, (sizeof(buff)-1)));
2097 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2098 "Transitional//EN\">\n", buff);
2099
2100 memset(buff, 0, sizeof(buff));
2101 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2102 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2103 assertEqualIntA(a, (sizeof(buff)-1),
2104 archive_read_data(a, buff, (sizeof(buff)-1)));
2105 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2106 "</P>\n</BODY>\n</HTML>", buff);
2107
2108 memset(buff, 0, sizeof(buff));
2109 assertEqualIntA(a, 6162,
2110 archive_seek_data(a, 6162, SEEK_SET));
2111 assertEqualIntA(a, (sizeof(buff)-1),
2112 archive_read_data(a, buff, (sizeof(buff)-1)));
2113 assertEqualStringA(a, "arguments satisfy certain conditions. "
2114 "If the assertion fails--f", buff);
2115
2116 memset(buff, 0, sizeof(buff));
2117 assertEqualIntA(a, 19347,
2118 archive_seek_data(a, 19347, SEEK_SET));
2119 assertEqualIntA(a, (sizeof(buff)-1),
2120 archive_read_data(a, buff, (sizeof(buff)-1)));
2121 assertEqualStringA(a, " when a block being written out by\n"
2122 "the archive writer is the sa", buff);
2123
2124 memset(buff, 0, sizeof(buff));
2125 assertEqualIntA(a, 0,
2126 archive_seek_data(a, 0, SEEK_SET));
2127 assertEqualIntA(a, (sizeof(buff)-1),
2128 archive_read_data(a, buff, (sizeof(buff)-1)));
2129 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2130 "Transitional//EN\">\n", buff);
2131
2132 memset(buff, 0, sizeof(buff));
2133 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2134 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2135 assertEqualIntA(a, (sizeof(buff)-1),
2136 archive_read_data(a, buff, (sizeof(buff)-1)));
2137 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2138 "</P>\n</BODY>\n</HTML>", buff);
2139
2140 memset(buff, 0, sizeof(buff));
2141 assertEqualIntA(a, 0,
2142 archive_seek_data(a, 0, SEEK_SET));
2143 assertEqualIntA(a, (sizeof(buff)-1),
2144 archive_read_data(a, buff, (sizeof(buff)-1)));
2145 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2146 "Transitional//EN\">\n", buff);
2147
2148 memset(buff, 0, sizeof(buff));
2149 assertEqualIntA(a, 19347,
2150 archive_seek_data(a, 19347, SEEK_SET));
2151 assertEqualIntA(a, (sizeof(buff)-1),
2152 archive_read_data(a, buff, (sizeof(buff)-1)));
2153 assertEqualStringA(a, " when a block being written out by\n"
2154 "the archive writer is the sa", buff);
2155
2156 memset(buff, 0, sizeof(buff));
2157 assertEqualIntA(a, 6162,
2158 archive_seek_data(a, 6162, SEEK_SET));
2159 assertEqualIntA(a, (sizeof(buff)-1),
2160 archive_read_data(a, buff, (sizeof(buff)-1)));
2161 assertEqualStringA(a, "arguments satisfy certain conditions. "
2162 "If the assertion fails--f", buff);
2163
2164 /* Test that SEEK_CUR works correctly between data blocks */
2165 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2166 memset(buff, 0, sizeof(buff));
2167 assertEqualIntA(a, 6162,
2168 archive_seek_data(a, 6162, SEEK_CUR));
2169 assertEqualIntA(a, (sizeof(buff)-1),
2170 archive_read_data(a, buff, (sizeof(buff)-1)));
2171 assertEqualStringA(a, "arguments satisfy certain conditions. "
2172 "If the assertion fails--f", buff);
2173
2174 memset(buff, 0, sizeof(buff));
2175 assertEqualIntA(a, 19347,
2176 archive_seek_data(a, 13122, SEEK_CUR));
2177 assertEqualIntA(a, (sizeof(buff)-1),
2178 archive_read_data(a, buff, (sizeof(buff)-1)));
2179 assertEqualStringA(a, " when a block being written out by\n"
2180 "the archive writer is the sa", buff);
2181
2182 memset(buff, 0, sizeof(buff));
2183 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2184 archive_seek_data(a, 638, SEEK_CUR));
2185 assertEqualIntA(a, (sizeof(buff)-1),
2186 archive_read_data(a, buff, (sizeof(buff)-1)));
2187 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2188 "</P>\n</BODY>\n</HTML>", buff);
2189
2190 memset(buff, 0, sizeof(buff));
2191 assertEqualIntA(a, 19347,
2192 archive_seek_data(a, -764, SEEK_CUR));
2193 assertEqualIntA(a, (sizeof(buff)-1),
2194 archive_read_data(a, buff, (sizeof(buff)-1)));
2195 assertEqualStringA(a, " when a block being written out by\n"
2196 "the archive writer is the sa", buff);
2197
2198 memset(buff, 0, sizeof(buff));
2199 assertEqualIntA(a, 6162,
2200 archive_seek_data(a, -13248, SEEK_CUR));
2201 assertEqualIntA(a, (sizeof(buff)-1),
2202 archive_read_data(a, buff, (sizeof(buff)-1)));
2203 assertEqualStringA(a, "arguments satisfy certain conditions. "
2204 "If the assertion fails--f", buff);
2205
2206 memset(buff, 0, sizeof(buff));
2207 assertEqualIntA(a, 0,
2208 archive_seek_data(a, -6225, SEEK_CUR));
2209 assertEqualIntA(a, (sizeof(buff)-1),
2210 archive_read_data(a, buff, (sizeof(buff)-1)));
2211 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2212 "Transitional//EN\">\n", buff);
2213
2214 memset(buff, 0, sizeof(buff));
2215 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2216 archive_seek_data(a, 19985, SEEK_CUR));
2217 assertEqualIntA(a, (sizeof(buff)-1),
2218 archive_read_data(a, buff, (sizeof(buff)-1)));
2219 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2220 "</P>\n</BODY>\n</HTML>", buff);
2221
2222 memset(buff, 0, sizeof(buff));
2223 assertEqualIntA(a, 6162,
2224 archive_seek_data(a, -13949, SEEK_CUR));
2225 assertEqualIntA(a, (sizeof(buff)-1),
2226 archive_read_data(a, buff, (sizeof(buff)-1)));
2227 assertEqualStringA(a, "arguments satisfy certain conditions. "
2228 "If the assertion fails--f", buff);
2229
2230 memset(buff, 0, sizeof(buff));
2231 assertEqualIntA(a, 19347,
2232 archive_seek_data(a, 13122, SEEK_CUR));
2233 assertEqualIntA(a, (sizeof(buff)-1),
2234 archive_read_data(a, buff, (sizeof(buff)-1)));
2235 assertEqualStringA(a, " when a block being written out by\n"
2236 "the archive writer is the sa", buff);
2237
2238 memset(buff, 0, sizeof(buff));
2239 assertEqualIntA(a, 0,
2240 archive_seek_data(a, -19410, SEEK_CUR));
2241 assertEqualIntA(a, (sizeof(buff)-1),
2242 archive_read_data(a, buff, (sizeof(buff)-1)));
2243 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2244 "Transitional//EN\">\n", buff);
2245
2246 memset(buff, 0, sizeof(buff));
2247 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2248 archive_seek_data(a, 19985, SEEK_CUR));
2249 assertEqualIntA(a, (sizeof(buff)-1),
2250 archive_read_data(a, buff, (sizeof(buff)-1)));
2251 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2252 "</P>\n</BODY>\n</HTML>", buff);
2253
2254 memset(buff, 0, sizeof(buff));
2255 assertEqualIntA(a, 0,
2256 archive_seek_data(a, -20111, SEEK_CUR));
2257 assertEqualIntA(a, (sizeof(buff)-1),
2258 archive_read_data(a, buff, (sizeof(buff)-1)));
2259 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2260 "Transitional//EN\">\n", buff);
2261
2262 memset(buff, 0, sizeof(buff));
2263 assertEqualIntA(a, 19347,
2264 archive_seek_data(a, 19284, SEEK_CUR));
2265 assertEqualIntA(a, (sizeof(buff)-1),
2266 archive_read_data(a, buff, (sizeof(buff)-1)));
2267 assertEqualStringA(a, " when a block being written out by\n"
2268 "the archive writer is the sa", buff);
2269
2270 memset(buff, 0, sizeof(buff));
2271 assertEqualIntA(a, 6162,
2272 archive_seek_data(a, -13248, SEEK_CUR));
2273 assertEqualIntA(a, (sizeof(buff)-1),
2274 archive_read_data(a, buff, (sizeof(buff)-1)));
2275 assertEqualStringA(a, "arguments satisfy certain conditions. "
2276 "If the assertion fails--f", buff);
2277
2278 /* Test that SEEK_END works correctly between data blocks */
2279 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2280 memset(buff, 0, sizeof(buff));
2281 assertEqualIntA(a, 6162,
2282 archive_seek_data(a, -13949, SEEK_END));
2283 assertEqualIntA(a, (sizeof(buff)-1),
2284 archive_read_data(a, buff, (sizeof(buff)-1)));
2285 assertEqualStringA(a, "arguments satisfy certain conditions. "
2286 "If the assertion fails--f", buff);
2287
2288 memset(buff, 0, sizeof(buff));
2289 assertEqualIntA(a, 19347,
2290 archive_seek_data(a, -764, SEEK_END));
2291 assertEqualIntA(a, (sizeof(buff)-1),
2292 archive_read_data(a, buff, (sizeof(buff)-1)));
2293 assertEqualStringA(a, " when a block being written out by\n"
2294 "the archive writer is the sa", buff);
2295
2296 memset(buff, 0, sizeof(buff));
2297 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2298 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2299 assertEqualIntA(a, (sizeof(buff)-1),
2300 archive_read_data(a, buff, (sizeof(buff)-1)));
2301 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2302 "</P>\n</BODY>\n</HTML>", buff);
2303
2304 memset(buff, 0, sizeof(buff));
2305 assertEqualIntA(a, 19347,
2306 archive_seek_data(a, -764, SEEK_END));
2307 assertEqualIntA(a, (sizeof(buff)-1),
2308 archive_read_data(a, buff, (sizeof(buff)-1)));
2309 assertEqualStringA(a, " when a block being written out by\n"
2310 "the archive writer is the sa", buff);
2311
2312 memset(buff, 0, sizeof(buff));
2313 assertEqualIntA(a, 6162,
2314 archive_seek_data(a, -13949, SEEK_END));
2315 assertEqualIntA(a, (sizeof(buff)-1),
2316 archive_read_data(a, buff, (sizeof(buff)-1)));
2317 assertEqualStringA(a, "arguments satisfy certain conditions. "
2318 "If the assertion fails--f", buff);
2319
2320 memset(buff, 0, sizeof(buff));
2321 assertEqualIntA(a, 0,
2322 archive_seek_data(a, -20111, SEEK_END));
2323 assertEqualIntA(a, (sizeof(buff)-1),
2324 archive_read_data(a, buff, (sizeof(buff)-1)));
2325 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2326 "Transitional//EN\">\n", buff);
2327
2328 memset(buff, 0, sizeof(buff));
2329 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2330 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2331 assertEqualIntA(a, (sizeof(buff)-1),
2332 archive_read_data(a, buff, (sizeof(buff)-1)));
2333 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2334 "</P>\n</BODY>\n</HTML>", buff);
2335
2336 memset(buff, 0, sizeof(buff));
2337 assertEqualIntA(a, 6162,
2338 archive_seek_data(a, -13949, SEEK_END));
2339 assertEqualIntA(a, (sizeof(buff)-1),
2340 archive_read_data(a, buff, (sizeof(buff)-1)));
2341 assertEqualStringA(a, "arguments satisfy certain conditions. "
2342 "If the assertion fails--f", buff);
2343
2344 memset(buff, 0, sizeof(buff));
2345 assertEqualIntA(a, 19347,
2346 archive_seek_data(a, -764, SEEK_END));
2347 assertEqualIntA(a, (sizeof(buff)-1),
2348 archive_read_data(a, buff, (sizeof(buff)-1)));
2349 assertEqualStringA(a, " when a block being written out by\n"
2350 "the archive writer is the sa", buff);
2351
2352 memset(buff, 0, sizeof(buff));
2353 assertEqualIntA(a, 0,
2354 archive_seek_data(a, -20111, SEEK_END));
2355 assertEqualIntA(a, (sizeof(buff)-1),
2356 archive_read_data(a, buff, (sizeof(buff)-1)));
2357 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2358 "Transitional//EN\">\n", buff);
2359
2360 memset(buff, 0, sizeof(buff));
2361 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2362 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2363 assertEqualIntA(a, (sizeof(buff)-1),
2364 archive_read_data(a, buff, (sizeof(buff)-1)));
2365 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2366 "</P>\n</BODY>\n</HTML>", buff);
2367
2368 memset(buff, 0, sizeof(buff));
2369 assertEqualIntA(a, 0,
2370 archive_seek_data(a, -20111, SEEK_END));
2371 assertEqualIntA(a, (sizeof(buff)-1),
2372 archive_read_data(a, buff, (sizeof(buff)-1)));
2373 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2374 "Transitional//EN\">\n", buff);
2375
2376 memset(buff, 0, sizeof(buff));
2377 assertEqualIntA(a, 19347,
2378 archive_seek_data(a, -764, SEEK_END));
2379 assertEqualIntA(a, (sizeof(buff)-1),
2380 archive_read_data(a, buff, (sizeof(buff)-1)));
2381 assertEqualStringA(a, " when a block being written out by\n"
2382 "the archive writer is the sa", buff);
2383
2384 memset(buff, 0, sizeof(buff));
2385 assertEqualIntA(a, 6162,
2386 archive_seek_data(a, -13949, SEEK_END));
2387 assertEqualIntA(a, (sizeof(buff)-1),
2388 archive_read_data(a, buff, (sizeof(buff)-1)));
2389 assertEqualStringA(a, "arguments satisfy certain conditions. "
2390 "If the assertion fails--f", buff);
2391
2392 test_read_format_rar_multivolume_uncompressed_files_helper(a);
2393
2394 /*
2395 * Third header.
2396 */
2397 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
2398 assertEqualStringA(a, "LibarchiveAddingTest2.html",
2399 archive_entry_pathname(ae));
2400 assertA((int)archive_entry_mtime(ae));
2401 assertA((int)archive_entry_ctime(ae));
2402 assertA((int)archive_entry_atime(ae));
2403 assertEqualIntA(a, 20111, archive_entry_size(ae));
2404 assertEqualIntA(a, 33188, archive_entry_mode(ae));
2405 assertEqualInt(archive_entry_is_encrypted(ae), 0);
2406 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
2407
2408 test_read_format_rar_multivolume_uncompressed_files_helper(a);
2409
2410 /* Read from the beginning to the end of the file */
2411 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2412 do
2413 {
2414 memset(buff, 0, sizeof(buff));
2415 bytes_read = archive_read_data(a, buff, (sizeof(buff)-1));
2416 } while (bytes_read > 0);
2417
2418 /* Seek to the end minus (sizeof(buff)-1) bytes */
2419 memset(buff, 0, sizeof(buff));
2420 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2421 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2422 assertEqualIntA(a, (sizeof(buff)-1),
2423 archive_read_data(a, buff, (sizeof(buff)-1)));
2424 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2425 "</P>\n</BODY>\n</HTML>", buff);
2426
2427 /* Seek back to the beginning */
2428 memset(buff, 0, sizeof(buff));
2429 assertEqualIntA(a, 0, archive_seek_data(a, -20111, SEEK_END));
2430 assertEqualIntA(a, (sizeof(buff)-1),
2431 archive_read_data(a, buff, (sizeof(buff)-1)));
2432 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2433 "Transitional//EN\">\n", buff);
2434
2435 /* Test that SEEK_SET works correctly between data blocks */
2436 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2437 memset(buff, 0, sizeof(buff));
2438 assertEqualIntA(a, 12353,
2439 archive_seek_data(a, 12353, SEEK_SET));
2440 assertEqualIntA(a, (sizeof(buff)-1),
2441 archive_read_data(a, buff, (sizeof(buff)-1)));
2442 assertEqualStringA(a, " 0.2in\"> "
2443 "extract_reference_file("test_foo.tar", buff);
2444
2445 memset(buff, 0, sizeof(buff));
2446 assertEqualIntA(a, 0,
2447 archive_seek_data(a, 0, SEEK_SET));
2448 assertEqualIntA(a, (sizeof(buff)-1),
2449 archive_read_data(a, buff, (sizeof(buff)-1)));
2450 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2451 "Transitional//EN\">\n", buff);
2452
2453 memset(buff, 0, sizeof(buff));
2454 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2455 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2456 assertEqualIntA(a, (sizeof(buff)-1),
2457 archive_read_data(a, buff, (sizeof(buff)-1)));
2458 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2459 "</P>\n</BODY>\n</HTML>", buff);
2460
2461 memset(buff, 0, sizeof(buff));
2462 assertEqualIntA(a, 12353,
2463 archive_seek_data(a, 12353, SEEK_SET));
2464 assertEqualIntA(a, (sizeof(buff)-1),
2465 archive_read_data(a, buff, (sizeof(buff)-1)));
2466 assertEqualStringA(a, " 0.2in\"> "
2467 "extract_reference_file("test_foo.tar", buff);
2468
2469 memset(buff, 0, sizeof(buff));
2470 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2471 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2472 assertEqualIntA(a, (sizeof(buff)-1),
2473 archive_read_data(a, buff, (sizeof(buff)-1)));
2474 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2475 "</P>\n</BODY>\n</HTML>", buff);
2476
2477 memset(buff, 0, sizeof(buff));
2478 assertEqualIntA(a, 0,
2479 archive_seek_data(a, 0, SEEK_SET));
2480 assertEqualIntA(a, (sizeof(buff)-1),
2481 archive_read_data(a, buff, (sizeof(buff)-1)));
2482 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2483 "Transitional//EN\">\n", buff);
2484
2485 memset(buff, 0, sizeof(buff));
2486 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2487 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2488 assertEqualIntA(a, (sizeof(buff)-1),
2489 archive_read_data(a, buff, (sizeof(buff)-1)));
2490 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2491 "</P>\n</BODY>\n</HTML>", buff);
2492
2493 memset(buff, 0, sizeof(buff));
2494 assertEqualIntA(a, 12353,
2495 archive_seek_data(a, 12353, SEEK_SET));
2496 assertEqualIntA(a, (sizeof(buff)-1),
2497 archive_read_data(a, buff, (sizeof(buff)-1)));
2498 assertEqualStringA(a, " 0.2in\"> "
2499 "extract_reference_file("test_foo.tar", buff);
2500
2501 memset(buff, 0, sizeof(buff));
2502 assertEqualIntA(a, 0,
2503 archive_seek_data(a, 0, SEEK_SET));
2504 assertEqualIntA(a, (sizeof(buff)-1),
2505 archive_read_data(a, buff, (sizeof(buff)-1)));
2506 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2507 "Transitional//EN\">\n", buff);
2508
2509 /* Test that SEEK_CUR works correctly between data blocks */
2510 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2511 memset(buff, 0, sizeof(buff));
2512 assertEqualIntA(a, 12353,
2513 archive_seek_data(a, 12353, SEEK_CUR));
2514 assertEqualIntA(a, (sizeof(buff)-1),
2515 archive_read_data(a, buff, (sizeof(buff)-1)));
2516 assertEqualStringA(a, " 0.2in\"> "
2517 "extract_reference_file("test_foo.tar", buff);
2518
2519 memset(buff, 0, sizeof(buff));
2520 assertEqualIntA(a, 0,
2521 archive_seek_data(a, -12416, SEEK_CUR));
2522 assertEqualIntA(a, (sizeof(buff)-1),
2523 archive_read_data(a, buff, (sizeof(buff)-1)));
2524 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2525 "Transitional//EN\">\n", buff);
2526
2527 memset(buff, 0, sizeof(buff));
2528 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2529 archive_seek_data(a, 19985, SEEK_CUR));
2530 assertEqualIntA(a, (sizeof(buff)-1),
2531 archive_read_data(a, buff, (sizeof(buff)-1)));
2532 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2533 "</P>\n</BODY>\n</HTML>", buff);
2534
2535 memset(buff, 0, sizeof(buff));
2536 assertEqualIntA(a, 12353,
2537 archive_seek_data(a, -7758, SEEK_CUR));
2538 assertEqualIntA(a, (sizeof(buff)-1),
2539 archive_read_data(a, buff, (sizeof(buff)-1)));
2540 assertEqualStringA(a, " 0.2in\"> "
2541 "extract_reference_file("test_foo.tar", buff);
2542
2543 memset(buff, 0, sizeof(buff));
2544 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2545 archive_seek_data(a, 7632, SEEK_CUR));
2546 assertEqualIntA(a, (sizeof(buff)-1),
2547 archive_read_data(a, buff, (sizeof(buff)-1)));
2548 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2549 "</P>\n</BODY>\n</HTML>", buff);
2550
2551 memset(buff, 0, sizeof(buff));
2552 assertEqualIntA(a, 0,
2553 archive_seek_data(a, -20111, SEEK_CUR));
2554 assertEqualIntA(a, (sizeof(buff)-1),
2555 archive_read_data(a, buff, (sizeof(buff)-1)));
2556 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2557 "Transitional//EN\">\n", buff);
2558
2559 memset(buff, 0, sizeof(buff));
2560 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2561 archive_seek_data(a, 19985, SEEK_CUR));
2562 assertEqualIntA(a, (sizeof(buff)-1),
2563 archive_read_data(a, buff, (sizeof(buff)-1)));
2564 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2565 "</P>\n</BODY>\n</HTML>", buff);
2566
2567 memset(buff, 0, sizeof(buff));
2568 assertEqualIntA(a, 12353,
2569 archive_seek_data(a, -7758, SEEK_CUR));
2570 assertEqualIntA(a, (sizeof(buff)-1),
2571 archive_read_data(a, buff, (sizeof(buff)-1)));
2572 assertEqualStringA(a, " 0.2in\"> "
2573 "extract_reference_file("test_foo.tar", buff);
2574
2575 memset(buff, 0, sizeof(buff));
2576 assertEqualIntA(a, 0,
2577 archive_seek_data(a, -12416, SEEK_CUR));
2578 assertEqualIntA(a, (sizeof(buff)-1),
2579 archive_read_data(a, buff, (sizeof(buff)-1)));
2580 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2581 "Transitional//EN\">\n", buff);
2582
2583 /* Test that SEEK_END works correctly between data blocks */
2584 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2585 memset(buff, 0, sizeof(buff));
2586 assertEqualIntA(a, 12353,
2587 archive_seek_data(a, -7758, SEEK_END));
2588 assertEqualIntA(a, (sizeof(buff)-1),
2589 archive_read_data(a, buff, (sizeof(buff)-1)));
2590 assertEqualStringA(a, " 0.2in\"> "
2591 "extract_reference_file("test_foo.tar", buff);
2592
2593 memset(buff, 0, sizeof(buff));
2594 assertEqualIntA(a, 0,
2595 archive_seek_data(a, -20111, SEEK_END));
2596 assertEqualIntA(a, (sizeof(buff)-1),
2597 archive_read_data(a, buff, (sizeof(buff)-1)));
2598 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2599 "Transitional//EN\">\n", buff);
2600
2601 memset(buff, 0, sizeof(buff));
2602 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2603 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2604 assertEqualIntA(a, (sizeof(buff)-1),
2605 archive_read_data(a, buff, (sizeof(buff)-1)));
2606 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2607 "</P>\n</BODY>\n</HTML>", buff);
2608
2609 memset(buff, 0, sizeof(buff));
2610 assertEqualIntA(a, 12353,
2611 archive_seek_data(a, -7758, SEEK_END));
2612 assertEqualIntA(a, (sizeof(buff)-1),
2613 archive_read_data(a, buff, (sizeof(buff)-1)));
2614 assertEqualStringA(a, " 0.2in\"> "
2615 "extract_reference_file("test_foo.tar", buff);
2616
2617 memset(buff, 0, sizeof(buff));
2618 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2619 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2620 assertEqualIntA(a, (sizeof(buff)-1),
2621 archive_read_data(a, buff, (sizeof(buff)-1)));
2622 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2623 "</P>\n</BODY>\n</HTML>", buff);
2624
2625 memset(buff, 0, sizeof(buff));
2626 assertEqualIntA(a, 0,
2627 archive_seek_data(a, -20111, SEEK_END));
2628 assertEqualIntA(a, (sizeof(buff)-1),
2629 archive_read_data(a, buff, (sizeof(buff)-1)));
2630 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2631 "Transitional//EN\">\n", buff);
2632
2633 memset(buff, 0, sizeof(buff));
2634 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2635 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2636 assertEqualIntA(a, (sizeof(buff)-1),
2637 archive_read_data(a, buff, (sizeof(buff)-1)));
2638 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2639 "</P>\n</BODY>\n</HTML>", buff);
2640
2641 memset(buff, 0, sizeof(buff));
2642 assertEqualIntA(a, 12353,
2643 archive_seek_data(a, -7758, SEEK_END));
2644 assertEqualIntA(a, (sizeof(buff)-1),
2645 archive_read_data(a, buff, (sizeof(buff)-1)));
2646 assertEqualStringA(a, " 0.2in\"> "
2647 "extract_reference_file("test_foo.tar", buff);
2648
2649 memset(buff, 0, sizeof(buff));
2650 assertEqualIntA(a, 0,
2651 archive_seek_data(a, -20111, SEEK_END));
2652 assertEqualIntA(a, (sizeof(buff)-1),
2653 archive_read_data(a, buff, (sizeof(buff)-1)));
2654 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2655 "Transitional//EN\">\n", buff);
2656
2657 test_read_format_rar_multivolume_uncompressed_files_helper(a);
2658
2659 /*
2660 * Fourth header.
2661 */
2662 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
2663 assertEqualStringA(a, "testdir/LibarchiveAddingTest.html",
2664 archive_entry_pathname(ae));
2665 assertA((int)archive_entry_mtime(ae));
2666 assertA((int)archive_entry_ctime(ae));
2667 assertA((int)archive_entry_atime(ae));
2668 assertEqualIntA(a, 20111, archive_entry_size(ae));
2669 assertEqualIntA(a, 33188, archive_entry_mode(ae));
2670 assertEqualInt(archive_entry_is_encrypted(ae), 0);
2671 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
2672
2673 test_read_format_rar_multivolume_uncompressed_files_helper(a);
2674
2675 /* Read from the beginning to the end of the file */
2676 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2677 do
2678 {
2679 memset(buff, 0, sizeof(buff));
2680 bytes_read = archive_read_data(a, buff, (sizeof(buff)-1));
2681 } while (bytes_read > 0);
2682
2683 /* Seek to the end minus (sizeof(buff)-1) bytes */
2684 memset(buff, 0, sizeof(buff));
2685 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2686 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2687 assertEqualIntA(a, (sizeof(buff)-1),
2688 archive_read_data(a, buff, (sizeof(buff)-1)));
2689 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2690 "</P>\n</BODY>\n</HTML>", buff);
2691
2692 /* Seek back to the beginning */
2693 memset(buff, 0, sizeof(buff));
2694 assertEqualIntA(a, 0, archive_seek_data(a, -20111, SEEK_END));
2695 assertEqualIntA(a, (sizeof(buff)-1),
2696 archive_read_data(a, buff, (sizeof(buff)-1)));
2697 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2698 "Transitional//EN\">\n", buff);
2699
2700 /* Test that SEEK_SET works correctly between data blocks */
2701 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2702 memset(buff, 0, sizeof(buff));
2703 assertEqualIntA(a, 5371,
2704 archive_seek_data(a, 5371, SEEK_SET));
2705 assertEqualIntA(a, (sizeof(buff)-1),
2706 archive_read_data(a, buff, (sizeof(buff)-1)));
2707 assertEqualStringA(a, "zip)\n {\n "
2708 "/* ... setup omitted ... */\n ", buff);
2709
2710 memset(buff, 0, sizeof(buff));
2711 assertEqualIntA(a, 13165,
2712 archive_seek_data(a, 13165, SEEK_SET));
2713 assertEqualIntA(a, (sizeof(buff)-1),
2714 archive_read_data(a, buff, (sizeof(buff)-1)));
2715 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2716 "assertEqualMem to test equality", buff);
2717
2718 memset(buff, 0, sizeof(buff));
2719 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2720 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2721 assertEqualIntA(a, (sizeof(buff)-1),
2722 archive_read_data(a, buff, (sizeof(buff)-1)));
2723 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2724 "</P>\n</BODY>\n</HTML>", buff);
2725
2726 memset(buff, 0, sizeof(buff));
2727 assertEqualIntA(a, 13165,
2728 archive_seek_data(a, 13165, SEEK_SET));
2729 assertEqualIntA(a, (sizeof(buff)-1),
2730 archive_read_data(a, buff, (sizeof(buff)-1)));
2731 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2732 "assertEqualMem to test equality", buff);
2733
2734 memset(buff, 0, sizeof(buff));
2735 assertEqualIntA(a, 5371,
2736 archive_seek_data(a, 5371, SEEK_SET));
2737 assertEqualIntA(a, (sizeof(buff)-1),
2738 archive_read_data(a, buff, (sizeof(buff)-1)));
2739 assertEqualStringA(a, "zip)\n {\n "
2740 "/* ... setup omitted ... */\n ", buff);
2741
2742 memset(buff, 0, sizeof(buff));
2743 assertEqualIntA(a, 0,
2744 archive_seek_data(a, 0, SEEK_SET));
2745 assertEqualIntA(a, (sizeof(buff)-1),
2746 archive_read_data(a, buff, (sizeof(buff)-1)));
2747 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2748 "Transitional//EN\">\n", buff);
2749
2750 memset(buff, 0, sizeof(buff));
2751 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2752 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2753 assertEqualIntA(a, (sizeof(buff)-1),
2754 archive_read_data(a, buff, (sizeof(buff)-1)));
2755 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2756 "</P>\n</BODY>\n</HTML>", buff);
2757
2758 memset(buff, 0, sizeof(buff));
2759 assertEqualIntA(a, 5371,
2760 archive_seek_data(a, 5371, SEEK_SET));
2761 assertEqualIntA(a, (sizeof(buff)-1),
2762 archive_read_data(a, buff, (sizeof(buff)-1)));
2763 assertEqualStringA(a, "zip)\n {\n "
2764 "/* ... setup omitted ... */\n ", buff);
2765
2766 memset(buff, 0, sizeof(buff));
2767 assertEqualIntA(a, 13165,
2768 archive_seek_data(a, 13165, SEEK_SET));
2769 assertEqualIntA(a, (sizeof(buff)-1),
2770 archive_read_data(a, buff, (sizeof(buff)-1)));
2771 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2772 "assertEqualMem to test equality", buff);
2773
2774 memset(buff, 0, sizeof(buff));
2775 assertEqualIntA(a, 0,
2776 archive_seek_data(a, 0, SEEK_SET));
2777 assertEqualIntA(a, (sizeof(buff)-1),
2778 archive_read_data(a, buff, (sizeof(buff)-1)));
2779 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2780 "Transitional//EN\">\n", buff);
2781
2782 memset(buff, 0, sizeof(buff));
2783 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2784 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
2785 assertEqualIntA(a, (sizeof(buff)-1),
2786 archive_read_data(a, buff, (sizeof(buff)-1)));
2787 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2788 "</P>\n</BODY>\n</HTML>", buff);
2789
2790 memset(buff, 0, sizeof(buff));
2791 assertEqualIntA(a, 0,
2792 archive_seek_data(a, 0, SEEK_SET));
2793 assertEqualIntA(a, (sizeof(buff)-1),
2794 archive_read_data(a, buff, (sizeof(buff)-1)));
2795 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2796 "Transitional//EN\">\n", buff);
2797
2798 memset(buff, 0, sizeof(buff));
2799 assertEqualIntA(a, 13165,
2800 archive_seek_data(a, 13165, SEEK_SET));
2801 assertEqualIntA(a, (sizeof(buff)-1),
2802 archive_read_data(a, buff, (sizeof(buff)-1)));
2803 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2804 "assertEqualMem to test equality", buff);
2805
2806 memset(buff, 0, sizeof(buff));
2807 assertEqualIntA(a, 5371,
2808 archive_seek_data(a, 5371, SEEK_SET));
2809 assertEqualIntA(a, (sizeof(buff)-1),
2810 archive_read_data(a, buff, (sizeof(buff)-1)));
2811 assertEqualStringA(a, "zip)\n {\n "
2812 "/* ... setup omitted ... */\n ", buff);
2813
2814 /* Test that SEEK_CUR works correctly between data blocks */
2815 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2816 memset(buff, 0, sizeof(buff));
2817 assertEqualIntA(a, 5371,
2818 archive_seek_data(a, 5371, SEEK_CUR));
2819 assertEqualIntA(a, (sizeof(buff)-1),
2820 archive_read_data(a, buff, (sizeof(buff)-1)));
2821 assertEqualStringA(a, "zip)\n {\n "
2822 "/* ... setup omitted ... */\n ", buff);
2823
2824 memset(buff, 0, sizeof(buff));
2825 assertEqualIntA(a, 13165,
2826 archive_seek_data(a, 7731, SEEK_CUR));
2827 assertEqualIntA(a, (sizeof(buff)-1),
2828 archive_read_data(a, buff, (sizeof(buff)-1)));
2829 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2830 "assertEqualMem to test equality", buff);
2831
2832 memset(buff, 0, sizeof(buff));
2833 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2834 archive_seek_data(a, 6820, SEEK_CUR));
2835 assertEqualIntA(a, (sizeof(buff)-1),
2836 archive_read_data(a, buff, (sizeof(buff)-1)));
2837 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2838 "</P>\n</BODY>\n</HTML>", buff);
2839
2840 memset(buff, 0, sizeof(buff));
2841 assertEqualIntA(a, 13165,
2842 archive_seek_data(a, -6946, SEEK_CUR));
2843 assertEqualIntA(a, (sizeof(buff)-1),
2844 archive_read_data(a, buff, (sizeof(buff)-1)));
2845 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2846 "assertEqualMem to test equality", buff);
2847
2848 memset(buff, 0, sizeof(buff));
2849 assertEqualIntA(a, 5371,
2850 archive_seek_data(a, -7857, SEEK_CUR));
2851 assertEqualIntA(a, (sizeof(buff)-1),
2852 archive_read_data(a, buff, (sizeof(buff)-1)));
2853 assertEqualStringA(a, "zip)\n {\n "
2854 "/* ... setup omitted ... */\n ", buff);
2855
2856 memset(buff, 0, sizeof(buff));
2857 assertEqualIntA(a, 0,
2858 archive_seek_data(a, -5434, SEEK_CUR));
2859 assertEqualIntA(a, (sizeof(buff)-1),
2860 archive_read_data(a, buff, (sizeof(buff)-1)));
2861 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2862 "Transitional//EN\">\n", buff);
2863
2864 memset(buff, 0, sizeof(buff));
2865 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2866 archive_seek_data(a, 19985, SEEK_CUR));
2867 assertEqualIntA(a, (sizeof(buff)-1),
2868 archive_read_data(a, buff, (sizeof(buff)-1)));
2869 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2870 "</P>\n</BODY>\n</HTML>", buff);
2871
2872 memset(buff, 0, sizeof(buff));
2873 assertEqualIntA(a, 5371,
2874 archive_seek_data(a, -14740, SEEK_CUR));
2875 assertEqualIntA(a, (sizeof(buff)-1),
2876 archive_read_data(a, buff, (sizeof(buff)-1)));
2877 assertEqualStringA(a, "zip)\n {\n "
2878 "/* ... setup omitted ... */\n ", buff);
2879
2880 memset(buff, 0, sizeof(buff));
2881 assertEqualIntA(a, 13165,
2882 archive_seek_data(a, 7731, SEEK_CUR));
2883 assertEqualIntA(a, (sizeof(buff)-1),
2884 archive_read_data(a, buff, (sizeof(buff)-1)));
2885 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2886 "assertEqualMem to test equality", buff);
2887
2888 memset(buff, 0, sizeof(buff));
2889 assertEqualIntA(a, 0,
2890 archive_seek_data(a, -13228, SEEK_CUR));
2891 assertEqualIntA(a, (sizeof(buff)-1),
2892 archive_read_data(a, buff, (sizeof(buff)-1)));
2893 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2894 "Transitional//EN\">\n", buff);
2895
2896 memset(buff, 0, sizeof(buff));
2897 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2898 archive_seek_data(a, 19985, SEEK_CUR));
2899 assertEqualIntA(a, (sizeof(buff)-1),
2900 archive_read_data(a, buff, (sizeof(buff)-1)));
2901 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2902 "</P>\n</BODY>\n</HTML>", buff);
2903
2904 memset(buff, 0, sizeof(buff));
2905 assertEqualIntA(a, 0,
2906 archive_seek_data(a, -20111, SEEK_CUR));
2907 assertEqualIntA(a, (sizeof(buff)-1),
2908 archive_read_data(a, buff, (sizeof(buff)-1)));
2909 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2910 "Transitional//EN\">\n", buff);
2911
2912 memset(buff, 0, sizeof(buff));
2913 assertEqualIntA(a, 13165,
2914 archive_seek_data(a, 13102, SEEK_CUR));
2915 assertEqualIntA(a, (sizeof(buff)-1),
2916 archive_read_data(a, buff, (sizeof(buff)-1)));
2917 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2918 "assertEqualMem to test equality", buff);
2919
2920 memset(buff, 0, sizeof(buff));
2921 assertEqualIntA(a, 5371,
2922 archive_seek_data(a, -7857, SEEK_CUR));
2923 assertEqualIntA(a, (sizeof(buff)-1),
2924 archive_read_data(a, buff, (sizeof(buff)-1)));
2925 assertEqualStringA(a, "zip)\n {\n "
2926 "/* ... setup omitted ... */\n ", buff);
2927
2928 /* Test that SEEK_END works correctly between data blocks */
2929 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
2930 memset(buff, 0, sizeof(buff));
2931 assertEqualIntA(a, 5371,
2932 archive_seek_data(a, -14740, SEEK_END));
2933 assertEqualIntA(a, (sizeof(buff)-1),
2934 archive_read_data(a, buff, (sizeof(buff)-1)));
2935 assertEqualStringA(a, "zip)\n {\n "
2936 "/* ... setup omitted ... */\n ", buff);
2937
2938 memset(buff, 0, sizeof(buff));
2939 assertEqualIntA(a, 13165,
2940 archive_seek_data(a, -6946, SEEK_END));
2941 assertEqualIntA(a, (sizeof(buff)-1),
2942 archive_read_data(a, buff, (sizeof(buff)-1)));
2943 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2944 "assertEqualMem to test equality", buff);
2945
2946 memset(buff, 0, sizeof(buff));
2947 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2948 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2949 assertEqualIntA(a, (sizeof(buff)-1),
2950 archive_read_data(a, buff, (sizeof(buff)-1)));
2951 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2952 "</P>\n</BODY>\n</HTML>", buff);
2953
2954 memset(buff, 0, sizeof(buff));
2955 assertEqualIntA(a, 13165,
2956 archive_seek_data(a, -6946, SEEK_END));
2957 assertEqualIntA(a, (sizeof(buff)-1),
2958 archive_read_data(a, buff, (sizeof(buff)-1)));
2959 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
2960 "assertEqualMem to test equality", buff);
2961
2962 memset(buff, 0, sizeof(buff));
2963 assertEqualIntA(a, 5371,
2964 archive_seek_data(a, -14740, SEEK_END));
2965 assertEqualIntA(a, (sizeof(buff)-1),
2966 archive_read_data(a, buff, (sizeof(buff)-1)));
2967 assertEqualStringA(a, "zip)\n {\n "
2968 "/* ... setup omitted ... */\n ", buff);
2969
2970 memset(buff, 0, sizeof(buff));
2971 assertEqualIntA(a, 0,
2972 archive_seek_data(a, -20111, SEEK_END));
2973 assertEqualIntA(a, (sizeof(buff)-1),
2974 archive_read_data(a, buff, (sizeof(buff)-1)));
2975 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
2976 "Transitional//EN\">\n", buff);
2977
2978 memset(buff, 0, sizeof(buff));
2979 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
2980 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
2981 assertEqualIntA(a, (sizeof(buff)-1),
2982 archive_read_data(a, buff, (sizeof(buff)-1)));
2983 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
2984 "</P>\n</BODY>\n</HTML>", buff);
2985
2986 memset(buff, 0, sizeof(buff));
2987 assertEqualIntA(a, 5371,
2988 archive_seek_data(a, -14740, SEEK_END));
2989 assertEqualIntA(a, (sizeof(buff)-1),
2990 archive_read_data(a, buff, (sizeof(buff)-1)));
2991 assertEqualStringA(a, "zip)\n {\n "
2992 "/* ... setup omitted ... */\n ", buff);
2993
2994 memset(buff, 0, sizeof(buff));
2995 assertEqualIntA(a, 13165,
2996 archive_seek_data(a, -6946, SEEK_END));
2997 assertEqualIntA(a, (sizeof(buff)-1),
2998 archive_read_data(a, buff, (sizeof(buff)-1)));
2999 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
3000 "assertEqualMem to test equality", buff);
3001
3002 memset(buff, 0, sizeof(buff));
3003 assertEqualIntA(a, 0,
3004 archive_seek_data(a, -20111, SEEK_END));
3005 assertEqualIntA(a, (sizeof(buff)-1),
3006 archive_read_data(a, buff, (sizeof(buff)-1)));
3007 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3008 "Transitional//EN\">\n", buff);
3009
3010 memset(buff, 0, sizeof(buff));
3011 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3012 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3013 assertEqualIntA(a, (sizeof(buff)-1),
3014 archive_read_data(a, buff, (sizeof(buff)-1)));
3015 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3016 "</P>\n</BODY>\n</HTML>", buff);
3017
3018 memset(buff, 0, sizeof(buff));
3019 assertEqualIntA(a, 0,
3020 archive_seek_data(a, -20111, SEEK_END));
3021 assertEqualIntA(a, (sizeof(buff)-1),
3022 archive_read_data(a, buff, (sizeof(buff)-1)));
3023 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3024 "Transitional//EN\">\n", buff);
3025
3026 memset(buff, 0, sizeof(buff));
3027 assertEqualIntA(a, 13165,
3028 archive_seek_data(a, -6946, SEEK_END));
3029 assertEqualIntA(a, (sizeof(buff)-1),
3030 archive_read_data(a, buff, (sizeof(buff)-1)));
3031 assertEqualStringA(a, "rtEqualInt,\n\tassertEqualString, "
3032 "assertEqualMem to test equality", buff);
3033
3034 memset(buff, 0, sizeof(buff));
3035 assertEqualIntA(a, 5371,
3036 archive_seek_data(a, -14740, SEEK_END));
3037 assertEqualIntA(a, (sizeof(buff)-1),
3038 archive_read_data(a, buff, (sizeof(buff)-1)));
3039 assertEqualStringA(a, "zip)\n {\n "
3040 "/* ... setup omitted ... */\n ", buff);
3041
3042 test_read_format_rar_multivolume_uncompressed_files_helper(a);
3043
3044 /*
3045 * Fifth header.
3046 */
3047 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
3048 assertEqualStringA(a, "testdir/testsubdir/LibarchiveAddingTest.html",
3049 archive_entry_pathname(ae));
3050 assertA((int)archive_entry_mtime(ae));
3051 assertA((int)archive_entry_ctime(ae));
3052 assertA((int)archive_entry_atime(ae));
3053 assertEqualIntA(a, 20111, archive_entry_size(ae));
3054 assertEqualIntA(a, 33188, archive_entry_mode(ae));
3055 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3056 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3057
3058 test_read_format_rar_multivolume_uncompressed_files_helper(a);
3059
3060 /* Read from the beginning to the end of the file */
3061 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3062 do
3063 {
3064 memset(buff, 0, sizeof(buff));
3065 bytes_read = archive_read_data(a, buff, (sizeof(buff)-1));
3066 } while (bytes_read > 0);
3067
3068 /* Seek to the end minus (sizeof(buff)-1) bytes */
3069 memset(buff, 0, sizeof(buff));
3070 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3071 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3072 assertEqualIntA(a, (sizeof(buff)-1),
3073 archive_read_data(a, buff, (sizeof(buff)-1)));
3074 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3075 "</P>\n</BODY>\n</HTML>", buff);
3076
3077 /* Seek back to the beginning */
3078 memset(buff, 0, sizeof(buff));
3079 assertEqualIntA(a, 0, archive_seek_data(a, -20111, SEEK_END));
3080 assertEqualIntA(a, (sizeof(buff)-1),
3081 archive_read_data(a, buff, (sizeof(buff)-1)));
3082 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3083 "Transitional//EN\">\n", buff);
3084
3085 /* Test that SEEK_SET works correctly between data blocks */
3086 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3087 memset(buff, 0, sizeof(buff));
3088 assertEqualIntA(a, 11568,
3089 archive_seek_data(a, 11568, SEEK_SET));
3090 assertEqualIntA(a, (sizeof(buff)-1),
3091 archive_read_data(a, buff, (sizeof(buff)-1)));
3092 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3093 "\n\t<TT CLASS=\"west", buff);
3094
3095 memset(buff, 0, sizeof(buff));
3096 assertEqualIntA(a, 0,
3097 archive_seek_data(a, 0, SEEK_SET));
3098 assertEqualIntA(a, (sizeof(buff)-1),
3099 archive_read_data(a, buff, (sizeof(buff)-1)));
3100 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3101 "Transitional//EN\">\n", buff);
3102
3103 memset(buff, 0, sizeof(buff));
3104 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3105 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
3106 assertEqualIntA(a, (sizeof(buff)-1),
3107 archive_read_data(a, buff, (sizeof(buff)-1)));
3108 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3109 "</P>\n</BODY>\n</HTML>", buff);
3110
3111 memset(buff, 0, sizeof(buff));
3112 assertEqualIntA(a, 11568,
3113 archive_seek_data(a, 11568, SEEK_SET));
3114 assertEqualIntA(a, (sizeof(buff)-1),
3115 archive_read_data(a, buff, (sizeof(buff)-1)));
3116 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3117 "\n\t<TT CLASS=\"west", buff);
3118
3119 memset(buff, 0, sizeof(buff));
3120 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3121 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
3122 assertEqualIntA(a, (sizeof(buff)-1),
3123 archive_read_data(a, buff, (sizeof(buff)-1)));
3124 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3125 "</P>\n</BODY>\n</HTML>", buff);
3126
3127 memset(buff, 0, sizeof(buff));
3128 assertEqualIntA(a, 0,
3129 archive_seek_data(a, 0, SEEK_SET));
3130 assertEqualIntA(a, (sizeof(buff)-1),
3131 archive_read_data(a, buff, (sizeof(buff)-1)));
3132 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3133 "Transitional//EN\">\n", buff);
3134
3135 memset(buff, 0, sizeof(buff));
3136 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3137 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
3138 assertEqualIntA(a, (sizeof(buff)-1),
3139 archive_read_data(a, buff, (sizeof(buff)-1)));
3140 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3141 "</P>\n</BODY>\n</HTML>", buff);
3142
3143 memset(buff, 0, sizeof(buff));
3144 assertEqualIntA(a, 11568,
3145 archive_seek_data(a, 11568, SEEK_SET));
3146 assertEqualIntA(a, (sizeof(buff)-1),
3147 archive_read_data(a, buff, (sizeof(buff)-1)));
3148 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3149 "\n\t<TT CLASS=\"west", buff);
3150
3151 memset(buff, 0, sizeof(buff));
3152 assertEqualIntA(a, 0,
3153 archive_seek_data(a, 0, SEEK_SET));
3154 assertEqualIntA(a, (sizeof(buff)-1),
3155 archive_read_data(a, buff, (sizeof(buff)-1)));
3156 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3157 "Transitional//EN\">\n", buff);
3158
3159 /* Test that SEEK_CUR works correctly between data blocks */
3160 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3161 memset(buff, 0, sizeof(buff));
3162 assertEqualIntA(a, 11568,
3163 archive_seek_data(a, 11568, SEEK_CUR));
3164 assertEqualIntA(a, (sizeof(buff)-1),
3165 archive_read_data(a, buff, (sizeof(buff)-1)));
3166 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3167 "\n\t<TT CLASS=\"west", buff);
3168
3169 memset(buff, 0, sizeof(buff));
3170 assertEqualIntA(a, 0,
3171 archive_seek_data(a, -11631, SEEK_CUR));
3172 assertEqualIntA(a, (sizeof(buff)-1),
3173 archive_read_data(a, buff, (sizeof(buff)-1)));
3174 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3175 "Transitional//EN\">\n", buff);
3176
3177 memset(buff, 0, sizeof(buff));
3178 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3179 archive_seek_data(a, 19985, SEEK_CUR));
3180 assertEqualIntA(a, (sizeof(buff)-1),
3181 archive_read_data(a, buff, (sizeof(buff)-1)));
3182 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3183 "</P>\n</BODY>\n</HTML>", buff);
3184
3185 memset(buff, 0, sizeof(buff));
3186 assertEqualIntA(a, 11568,
3187 archive_seek_data(a, -8543, SEEK_CUR));
3188 assertEqualIntA(a, (sizeof(buff)-1),
3189 archive_read_data(a, buff, (sizeof(buff)-1)));
3190 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3191 "\n\t<TT CLASS=\"west", buff);
3192
3193 memset(buff, 0, sizeof(buff));
3194 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3195 archive_seek_data(a, 8417, SEEK_CUR));
3196 assertEqualIntA(a, (sizeof(buff)-1),
3197 archive_read_data(a, buff, (sizeof(buff)-1)));
3198 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3199 "</P>\n</BODY>\n</HTML>", buff);
3200
3201 memset(buff, 0, sizeof(buff));
3202 assertEqualIntA(a, 0,
3203 archive_seek_data(a, -20111, SEEK_CUR));
3204 assertEqualIntA(a, (sizeof(buff)-1),
3205 archive_read_data(a, buff, (sizeof(buff)-1)));
3206 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3207 "Transitional//EN\">\n", buff);
3208
3209 memset(buff, 0, sizeof(buff));
3210 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3211 archive_seek_data(a, 19985, SEEK_CUR));
3212 assertEqualIntA(a, (sizeof(buff)-1),
3213 archive_read_data(a, buff, (sizeof(buff)-1)));
3214 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3215 "</P>\n</BODY>\n</HTML>", buff);
3216
3217 memset(buff, 0, sizeof(buff));
3218 assertEqualIntA(a, 11568,
3219 archive_seek_data(a, -8543, SEEK_CUR));
3220 assertEqualIntA(a, (sizeof(buff)-1),
3221 archive_read_data(a, buff, (sizeof(buff)-1)));
3222 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3223 "\n\t<TT CLASS=\"west", buff);
3224
3225 memset(buff, 0, sizeof(buff));
3226 assertEqualIntA(a, 0,
3227 archive_seek_data(a, -11631, SEEK_CUR));
3228 assertEqualIntA(a, (sizeof(buff)-1),
3229 archive_read_data(a, buff, (sizeof(buff)-1)));
3230 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3231 "Transitional//EN\">\n", buff);
3232
3233 /* Test that SEEK_END works correctly between data blocks */
3234 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3235 memset(buff, 0, sizeof(buff));
3236 assertEqualIntA(a, 11568,
3237 archive_seek_data(a, -8543, SEEK_END));
3238 assertEqualIntA(a, (sizeof(buff)-1),
3239 archive_read_data(a, buff, (sizeof(buff)-1)));
3240 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3241 "\n\t<TT CLASS=\"west", buff);
3242
3243 memset(buff, 0, sizeof(buff));
3244 assertEqualIntA(a, 0,
3245 archive_seek_data(a, -20111, SEEK_END));
3246 assertEqualIntA(a, (sizeof(buff)-1),
3247 archive_read_data(a, buff, (sizeof(buff)-1)));
3248 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3249 "Transitional//EN\">\n", buff);
3250
3251 memset(buff, 0, sizeof(buff));
3252 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3253 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3254 assertEqualIntA(a, (sizeof(buff)-1),
3255 archive_read_data(a, buff, (sizeof(buff)-1)));
3256 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3257 "</P>\n</BODY>\n</HTML>", buff);
3258
3259 memset(buff, 0, sizeof(buff));
3260 assertEqualIntA(a, 11568,
3261 archive_seek_data(a, -8543, SEEK_END));
3262 assertEqualIntA(a, (sizeof(buff)-1),
3263 archive_read_data(a, buff, (sizeof(buff)-1)));
3264 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3265 "\n\t<TT CLASS=\"west", buff);
3266
3267 memset(buff, 0, sizeof(buff));
3268 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3269 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3270 assertEqualIntA(a, (sizeof(buff)-1),
3271 archive_read_data(a, buff, (sizeof(buff)-1)));
3272 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3273 "</P>\n</BODY>\n</HTML>", buff);
3274
3275 memset(buff, 0, sizeof(buff));
3276 assertEqualIntA(a, 0,
3277 archive_seek_data(a, -20111, SEEK_END));
3278 assertEqualIntA(a, (sizeof(buff)-1),
3279 archive_read_data(a, buff, (sizeof(buff)-1)));
3280 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3281 "Transitional//EN\">\n", buff);
3282
3283 memset(buff, 0, sizeof(buff));
3284 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3285 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3286 assertEqualIntA(a, (sizeof(buff)-1),
3287 archive_read_data(a, buff, (sizeof(buff)-1)));
3288 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3289 "</P>\n</BODY>\n</HTML>", buff);
3290
3291 memset(buff, 0, sizeof(buff));
3292 assertEqualIntA(a, 11568,
3293 archive_seek_data(a, -8543, SEEK_END));
3294 assertEqualIntA(a, (sizeof(buff)-1),
3295 archive_read_data(a, buff, (sizeof(buff)-1)));
3296 assertEqualStringA(a, ", <TT CLASS=\"western\">assertFileContents</TT>,"
3297 "\n\t<TT CLASS=\"west", buff);
3298
3299 memset(buff, 0, sizeof(buff));
3300 assertEqualIntA(a, 0,
3301 archive_seek_data(a, -20111, SEEK_END));
3302 assertEqualIntA(a, (sizeof(buff)-1),
3303 archive_read_data(a, buff, (sizeof(buff)-1)));
3304 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3305 "Transitional//EN\">\n", buff);
3306
3307 test_read_format_rar_multivolume_uncompressed_files_helper(a);
3308
3309 /*
3310 * Sixth header.
3311 */
3312 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
3313 assertEqualStringA(a, "LibarchiveAddingTest.html",
3314 archive_entry_pathname(ae));
3315 assertA((int)archive_entry_mtime(ae));
3316 assertA((int)archive_entry_ctime(ae));
3317 assertA((int)archive_entry_atime(ae));
3318 assertEqualIntA(a, 20111, archive_entry_size(ae));
3319 assertEqualIntA(a, 33188, archive_entry_mode(ae));
3320 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3321 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3322
3323 test_read_format_rar_multivolume_uncompressed_files_helper(a);
3324
3325 /* Read from the beginning to the end of the file */
3326 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3327 do
3328 {
3329 memset(buff, 0, sizeof(buff));
3330 bytes_read = archive_read_data(a, buff, (sizeof(buff)-1));
3331 } while (bytes_read > 0);
3332
3333 /* Seek to the end minus (sizeof(buff)-1) bytes */
3334 memset(buff, 0, sizeof(buff));
3335 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3336 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3337 assertEqualIntA(a, (sizeof(buff)-1),
3338 archive_read_data(a, buff, (sizeof(buff)-1)));
3339 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3340 "</P>\n</BODY>\n</HTML>", buff);
3341
3342 /* Seek back to the beginning */
3343 memset(buff, 0, sizeof(buff));
3344 assertEqualIntA(a, 0, archive_seek_data(a, -20111, SEEK_END));
3345 assertEqualIntA(a, (sizeof(buff)-1),
3346 archive_read_data(a, buff, (sizeof(buff)-1)));
3347 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3348 "Transitional//EN\">\n", buff);
3349
3350 /* Test that SEEK_SET works correctly between data blocks */
3351 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3352 memset(buff, 0, sizeof(buff));
3353 assertEqualIntA(a, 4576,
3354 archive_seek_data(a, 4576, SEEK_SET));
3355 assertEqualIntA(a, (sizeof(buff)-1),
3356 archive_read_data(a, buff, (sizeof(buff)-1)));
3357 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3358 "NAME=\"Basic_test", buff);
3359
3360 memset(buff, 0, sizeof(buff));
3361 assertEqualIntA(a, 17749,
3362 archive_seek_data(a, 17749, SEEK_SET));
3363 assertEqualIntA(a, (sizeof(buff)-1),
3364 archive_read_data(a, buff, (sizeof(buff)-1)));
3365 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3366 "large tar tester attempts to", buff);
3367
3368 memset(buff, 0, sizeof(buff));
3369 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3370 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
3371 assertEqualIntA(a, (sizeof(buff)-1),
3372 archive_read_data(a, buff, (sizeof(buff)-1)));
3373 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3374 "</P>\n</BODY>\n</HTML>", buff);
3375
3376 memset(buff, 0, sizeof(buff));
3377 assertEqualIntA(a, 17749,
3378 archive_seek_data(a, 17749, SEEK_SET));
3379 assertEqualIntA(a, (sizeof(buff)-1),
3380 archive_read_data(a, buff, (sizeof(buff)-1)));
3381 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3382 "large tar tester attempts to", buff);
3383
3384 memset(buff, 0, sizeof(buff));
3385 assertEqualIntA(a, 4576,
3386 archive_seek_data(a, 4576, SEEK_SET));
3387 assertEqualIntA(a, (sizeof(buff)-1),
3388 archive_read_data(a, buff, (sizeof(buff)-1)));
3389 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3390 "NAME=\"Basic_test", buff);
3391
3392 memset(buff, 0, sizeof(buff));
3393 assertEqualIntA(a, 0,
3394 archive_seek_data(a, 0, SEEK_SET));
3395 assertEqualIntA(a, (sizeof(buff)-1),
3396 archive_read_data(a, buff, (sizeof(buff)-1)));
3397 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3398 "Transitional//EN\">\n", buff);
3399
3400 memset(buff, 0, sizeof(buff));
3401 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3402 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
3403 assertEqualIntA(a, (sizeof(buff)-1),
3404 archive_read_data(a, buff, (sizeof(buff)-1)));
3405 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3406 "</P>\n</BODY>\n</HTML>", buff);
3407
3408 memset(buff, 0, sizeof(buff));
3409 assertEqualIntA(a, 4576,
3410 archive_seek_data(a, 4576, SEEK_SET));
3411 assertEqualIntA(a, (sizeof(buff)-1),
3412 archive_read_data(a, buff, (sizeof(buff)-1)));
3413 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3414 "NAME=\"Basic_test", buff);
3415
3416 memset(buff, 0, sizeof(buff));
3417 assertEqualIntA(a, 17749,
3418 archive_seek_data(a, 17749, SEEK_SET));
3419 assertEqualIntA(a, (sizeof(buff)-1),
3420 archive_read_data(a, buff, (sizeof(buff)-1)));
3421 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3422 "large tar tester attempts to", buff);
3423
3424 memset(buff, 0, sizeof(buff));
3425 assertEqualIntA(a, 0,
3426 archive_seek_data(a, 0, SEEK_SET));
3427 assertEqualIntA(a, (sizeof(buff)-1),
3428 archive_read_data(a, buff, (sizeof(buff)-1)));
3429 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3430 "Transitional//EN\">\n", buff);
3431
3432 memset(buff, 0, sizeof(buff));
3433 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3434 archive_seek_data(a, 20111 - (int)(sizeof(buff)-1), SEEK_SET));
3435 assertEqualIntA(a, (sizeof(buff)-1),
3436 archive_read_data(a, buff, (sizeof(buff)-1)));
3437 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3438 "</P>\n</BODY>\n</HTML>", buff);
3439
3440 memset(buff, 0, sizeof(buff));
3441 assertEqualIntA(a, 0,
3442 archive_seek_data(a, 0, SEEK_SET));
3443 assertEqualIntA(a, (sizeof(buff)-1),
3444 archive_read_data(a, buff, (sizeof(buff)-1)));
3445 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3446 "Transitional//EN\">\n", buff);
3447
3448 memset(buff, 0, sizeof(buff));
3449 assertEqualIntA(a, 17749,
3450 archive_seek_data(a, 17749, SEEK_SET));
3451 assertEqualIntA(a, (sizeof(buff)-1),
3452 archive_read_data(a, buff, (sizeof(buff)-1)));
3453 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3454 "large tar tester attempts to", buff);
3455
3456 memset(buff, 0, sizeof(buff));
3457 assertEqualIntA(a, 4576,
3458 archive_seek_data(a, 4576, SEEK_SET));
3459 assertEqualIntA(a, (sizeof(buff)-1),
3460 archive_read_data(a, buff, (sizeof(buff)-1)));
3461 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3462 "NAME=\"Basic_test", buff);
3463
3464 /* Test that SEEK_CUR works correctly between data blocks */
3465 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3466 memset(buff, 0, sizeof(buff));
3467 assertEqualIntA(a, 4576,
3468 archive_seek_data(a, 4576, SEEK_CUR));
3469 assertEqualIntA(a, (sizeof(buff)-1),
3470 archive_read_data(a, buff, (sizeof(buff)-1)));
3471 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3472 "NAME=\"Basic_test", buff);
3473
3474 memset(buff, 0, sizeof(buff));
3475 assertEqualIntA(a, 17749,
3476 archive_seek_data(a, 13110, SEEK_CUR));
3477 assertEqualIntA(a, (sizeof(buff)-1),
3478 archive_read_data(a, buff, (sizeof(buff)-1)));
3479 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3480 "large tar tester attempts to", buff);
3481
3482 memset(buff, 0, sizeof(buff));
3483 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3484 archive_seek_data(a, 2236, SEEK_CUR));
3485 assertEqualIntA(a, (sizeof(buff)-1),
3486 archive_read_data(a, buff, (sizeof(buff)-1)));
3487 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3488 "</P>\n</BODY>\n</HTML>", buff);
3489
3490 memset(buff, 0, sizeof(buff));
3491 assertEqualIntA(a, 17749,
3492 archive_seek_data(a, -2362, SEEK_CUR));
3493 assertEqualIntA(a, (sizeof(buff)-1),
3494 archive_read_data(a, buff, (sizeof(buff)-1)));
3495 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3496 "large tar tester attempts to", buff);
3497
3498 memset(buff, 0, sizeof(buff));
3499 assertEqualIntA(a, 4576,
3500 archive_seek_data(a, -13236, SEEK_CUR));
3501 assertEqualIntA(a, (sizeof(buff)-1),
3502 archive_read_data(a, buff, (sizeof(buff)-1)));
3503 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3504 "NAME=\"Basic_test", buff);
3505
3506 memset(buff, 0, sizeof(buff));
3507 assertEqualIntA(a, 0,
3508 archive_seek_data(a, -4639, SEEK_CUR));
3509 assertEqualIntA(a, (sizeof(buff)-1),
3510 archive_read_data(a, buff, (sizeof(buff)-1)));
3511 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3512 "Transitional//EN\">\n", buff);
3513
3514 memset(buff, 0, sizeof(buff));
3515 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3516 archive_seek_data(a, 19985, SEEK_CUR));
3517 assertEqualIntA(a, (sizeof(buff)-1),
3518 archive_read_data(a, buff, (sizeof(buff)-1)));
3519 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3520 "</P>\n</BODY>\n</HTML>", buff);
3521
3522 memset(buff, 0, sizeof(buff));
3523 assertEqualIntA(a, 4576,
3524 archive_seek_data(a, -15535, SEEK_CUR));
3525 assertEqualIntA(a, (sizeof(buff)-1),
3526 archive_read_data(a, buff, (sizeof(buff)-1)));
3527 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3528 "NAME=\"Basic_test", buff);
3529
3530 memset(buff, 0, sizeof(buff));
3531 assertEqualIntA(a, 17749,
3532 archive_seek_data(a, 13110, SEEK_CUR));
3533 assertEqualIntA(a, (sizeof(buff)-1),
3534 archive_read_data(a, buff, (sizeof(buff)-1)));
3535 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3536 "large tar tester attempts to", buff);
3537
3538 memset(buff, 0, sizeof(buff));
3539 assertEqualIntA(a, 0,
3540 archive_seek_data(a, -17812, SEEK_CUR));
3541 assertEqualIntA(a, (sizeof(buff)-1),
3542 archive_read_data(a, buff, (sizeof(buff)-1)));
3543 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3544 "Transitional//EN\">\n", buff);
3545
3546 memset(buff, 0, sizeof(buff));
3547 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3548 archive_seek_data(a, 19985, SEEK_CUR));
3549 assertEqualIntA(a, (sizeof(buff)-1),
3550 archive_read_data(a, buff, (sizeof(buff)-1)));
3551 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3552 "</P>\n</BODY>\n</HTML>", buff);
3553
3554 memset(buff, 0, sizeof(buff));
3555 assertEqualIntA(a, 0,
3556 archive_seek_data(a, -20111, SEEK_CUR));
3557 assertEqualIntA(a, (sizeof(buff)-1),
3558 archive_read_data(a, buff, (sizeof(buff)-1)));
3559 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3560 "Transitional//EN\">\n", buff);
3561
3562 memset(buff, 0, sizeof(buff));
3563 assertEqualIntA(a, 17749,
3564 archive_seek_data(a, 17686, SEEK_CUR));
3565 assertEqualIntA(a, (sizeof(buff)-1),
3566 archive_read_data(a, buff, (sizeof(buff)-1)));
3567 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3568 "large tar tester attempts to", buff);
3569
3570 memset(buff, 0, sizeof(buff));
3571 assertEqualIntA(a, 4576,
3572 archive_seek_data(a, -13236, SEEK_CUR));
3573 assertEqualIntA(a, (sizeof(buff)-1),
3574 archive_read_data(a, buff, (sizeof(buff)-1)));
3575 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3576 "NAME=\"Basic_test", buff);
3577
3578 /* Test that SEEK_END works correctly between data blocks */
3579 assertEqualIntA(a, 0, archive_seek_data(a, 0, SEEK_SET));
3580 memset(buff, 0, sizeof(buff));
3581 assertEqualIntA(a, 4576,
3582 archive_seek_data(a, -15535, SEEK_END));
3583 assertEqualIntA(a, (sizeof(buff)-1),
3584 archive_read_data(a, buff, (sizeof(buff)-1)));
3585 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3586 "NAME=\"Basic_test", buff);
3587
3588 memset(buff, 0, sizeof(buff));
3589 assertEqualIntA(a, 17749,
3590 archive_seek_data(a, -2362, SEEK_END));
3591 assertEqualIntA(a, (sizeof(buff)-1),
3592 archive_read_data(a, buff, (sizeof(buff)-1)));
3593 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3594 "large tar tester attempts to", buff);
3595
3596 memset(buff, 0, sizeof(buff));
3597 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3598 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3599 assertEqualIntA(a, (sizeof(buff)-1),
3600 archive_read_data(a, buff, (sizeof(buff)-1)));
3601 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3602 "</P>\n</BODY>\n</HTML>", buff);
3603
3604 memset(buff, 0, sizeof(buff));
3605 assertEqualIntA(a, 17749,
3606 archive_seek_data(a, -2362, SEEK_END));
3607 assertEqualIntA(a, (sizeof(buff)-1),
3608 archive_read_data(a, buff, (sizeof(buff)-1)));
3609 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3610 "large tar tester attempts to", buff);
3611
3612 memset(buff, 0, sizeof(buff));
3613 assertEqualIntA(a, 4576,
3614 archive_seek_data(a, -15535, SEEK_END));
3615 assertEqualIntA(a, (sizeof(buff)-1),
3616 archive_read_data(a, buff, (sizeof(buff)-1)));
3617 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3618 "NAME=\"Basic_test", buff);
3619
3620 memset(buff, 0, sizeof(buff));
3621 assertEqualIntA(a, 0,
3622 archive_seek_data(a, -20111, SEEK_END));
3623 assertEqualIntA(a, (sizeof(buff)-1),
3624 archive_read_data(a, buff, (sizeof(buff)-1)));
3625 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3626 "Transitional//EN\">\n", buff);
3627
3628 memset(buff, 0, sizeof(buff));
3629 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3630 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3631 assertEqualIntA(a, (sizeof(buff)-1),
3632 archive_read_data(a, buff, (sizeof(buff)-1)));
3633 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3634 "</P>\n</BODY>\n</HTML>", buff);
3635
3636 memset(buff, 0, sizeof(buff));
3637 assertEqualIntA(a, 4576,
3638 archive_seek_data(a, -15535, SEEK_END));
3639 assertEqualIntA(a, (sizeof(buff)-1),
3640 archive_read_data(a, buff, (sizeof(buff)-1)));
3641 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3642 "NAME=\"Basic_test", buff);
3643
3644 memset(buff, 0, sizeof(buff));
3645 assertEqualIntA(a, 17749,
3646 archive_seek_data(a, -2362, SEEK_END));
3647 assertEqualIntA(a, (sizeof(buff)-1),
3648 archive_read_data(a, buff, (sizeof(buff)-1)));
3649 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3650 "large tar tester attempts to", buff);
3651
3652 memset(buff, 0, sizeof(buff));
3653 assertEqualIntA(a, 0,
3654 archive_seek_data(a, -20111, SEEK_END));
3655 assertEqualIntA(a, (sizeof(buff)-1),
3656 archive_read_data(a, buff, (sizeof(buff)-1)));
3657 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3658 "Transitional//EN\">\n", buff);
3659
3660 memset(buff, 0, sizeof(buff));
3661 assertEqualIntA(a, 20111 - (int)(sizeof(buff)-1),
3662 archive_seek_data(a, -((int)sizeof(buff)-1), SEEK_END));
3663 assertEqualIntA(a, (sizeof(buff)-1),
3664 archive_read_data(a, buff, (sizeof(buff)-1)));
3665 assertEqualStringA(a, ". \n</P>\n<P STYLE=\"margin-bottom: 0in\"><BR>\n"
3666 "</P>\n</BODY>\n</HTML>", buff);
3667
3668 memset(buff, 0, sizeof(buff));
3669 assertEqualIntA(a, 0,
3670 archive_seek_data(a, -20111, SEEK_END));
3671 assertEqualIntA(a, (sizeof(buff)-1),
3672 archive_read_data(a, buff, (sizeof(buff)-1)));
3673 assertEqualStringA(a, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
3674 "Transitional//EN\">\n", buff);
3675
3676 memset(buff, 0, sizeof(buff));
3677 assertEqualIntA(a, 17749,
3678 archive_seek_data(a, -2362, SEEK_END));
3679 assertEqualIntA(a, (sizeof(buff)-1),
3680 archive_read_data(a, buff, (sizeof(buff)-1)));
3681 assertEqualStringA(a, "\"></A>Large tar tester</H2>\n<P>The "
3682 "large tar tester attempts to", buff);
3683
3684 memset(buff, 0, sizeof(buff));
3685 assertEqualIntA(a, 4576,
3686 archive_seek_data(a, -15535, SEEK_END));
3687 assertEqualIntA(a, (sizeof(buff)-1),
3688 archive_read_data(a, buff, (sizeof(buff)-1)));
3689 assertEqualStringA(a, "hat was expected. \n</P>\n<H1 CLASS=\"western\"><A "
3690 "NAME=\"Basic_test", buff);
3691
3692 test_read_format_rar_multivolume_uncompressed_files_helper(a);
3693
3694 /*
3695 * Seventh header.
3696 */
3697 assertA(0 == archive_read_next_header(a, &ae));
3698 assertEqualString("testdir/testsymlink5", archive_entry_pathname(ae));
3699 assertA((int)archive_entry_mtime(ae));
3700 assertA((int)archive_entry_ctime(ae));
3701 assertA((int)archive_entry_atime(ae));
3702 assertEqualInt(0, archive_entry_size(ae));
3703 assertEqualInt(41471, archive_entry_mode(ae));
3704 assertEqualString("testsubdir/LibarchiveAddingTest.html",
3705 archive_entry_symlink(ae));
3706 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3707 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3708 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
3709
3710 /*
3711 * Eighth header.
3712 */
3713 assertA(0 == archive_read_next_header(a, &ae));
3714 assertEqualString("testdir/testsymlink6", archive_entry_pathname(ae));
3715 assertA((int)archive_entry_mtime(ae));
3716 assertA((int)archive_entry_ctime(ae));
3717 assertA((int)archive_entry_atime(ae));
3718 assertEqualInt(0, archive_entry_size(ae));
3719 assertEqualInt(41471, archive_entry_mode(ae));
3720 assertEqualString("testsubdir/LibarchiveAddingTest2.html",
3721 archive_entry_symlink(ae));
3722 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3723 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3724 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
3725
3726 /*
3727 * Ninth header.
3728 */
3729 assertA(0 == archive_read_next_header(a, &ae));
3730 assertEqualString("testsymlink", archive_entry_pathname(ae));
3731 assertA((int)archive_entry_mtime(ae));
3732 assertA((int)archive_entry_ctime(ae));
3733 assertA((int)archive_entry_atime(ae));
3734 assertEqualInt(0, archive_entry_size(ae));
3735 assertEqualInt(41471, archive_entry_mode(ae));
3736 assertEqualString("testdir/LibarchiveAddingTest.html",
3737 archive_entry_symlink(ae));
3738 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3739 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3740 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
3741
3742 /*
3743 * Tenth header.
3744 */
3745 assertA(0 == archive_read_next_header(a, &ae));
3746 assertEqualString("testsymlink2", archive_entry_pathname(ae));
3747 assertA((int)archive_entry_mtime(ae));
3748 assertA((int)archive_entry_ctime(ae));
3749 assertA((int)archive_entry_atime(ae));
3750 assertEqualInt(0, archive_entry_size(ae));
3751 assertEqualInt(41471, archive_entry_mode(ae));
3752 assertEqualString("testdir/LibarchiveAddingTest2.html",
3753 archive_entry_symlink(ae));
3754 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3755 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3756 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
3757
3758 /*
3759 * Eleventh header.
3760 */
3761 assertA(0 == archive_read_next_header(a, &ae));
3762 assertEqualString("testsymlink3", archive_entry_pathname(ae));
3763 assertA((int)archive_entry_mtime(ae));
3764 assertA((int)archive_entry_ctime(ae));
3765 assertA((int)archive_entry_atime(ae));
3766 assertEqualInt(0, archive_entry_size(ae));
3767 assertEqualInt(41471, archive_entry_mode(ae));
3768 assertEqualString("testdir/testsubdir/LibarchiveAddingTest.html",
3769 archive_entry_symlink(ae));
3770 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3771 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3772 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
3773
3774 /*
3775 * Twelfth header.
3776 */
3777 assertA(0 == archive_read_next_header(a, &ae));
3778 assertEqualString("testsymlink4", archive_entry_pathname(ae));
3779 assertA((int)archive_entry_mtime(ae));
3780 assertA((int)archive_entry_ctime(ae));
3781 assertA((int)archive_entry_atime(ae));
3782 assertEqualInt(0, archive_entry_size(ae));
3783 assertEqualInt(41471, archive_entry_mode(ae));
3784 assertEqualString("testdir/testsubdir/LibarchiveAddingTest2.html",
3785 archive_entry_symlink(ae));
3786 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3787 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3788 assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
3789
3790 /*
3791 * Thirteenth header.
3792 */
3793 assertA(0 == archive_read_next_header(a, &ae));
3794 assertEqualString("testdir/testemptysubdir", archive_entry_pathname(ae));
3795 assertA((int)archive_entry_mtime(ae));
3796 assertA((int)archive_entry_ctime(ae));
3797 assertA((int)archive_entry_atime(ae));
3798 assertEqualInt(0, archive_entry_size(ae));
3799 assertEqualInt(16877, archive_entry_mode(ae));
3800 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3801 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3802
3803 /*
3804 * Fourteenth header.
3805 */
3806 assertA(0 == archive_read_next_header(a, &ae));
3807 assertEqualString("testdir/testsubdir", archive_entry_pathname(ae));
3808 assertA((int)archive_entry_mtime(ae));
3809 assertA((int)archive_entry_ctime(ae));
3810 assertA((int)archive_entry_atime(ae));
3811 assertEqualInt(0, archive_entry_size(ae));
3812 assertEqualInt(16877, archive_entry_mode(ae));
3813 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3814 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3815
3816 /*
3817 * Fifteenth header.
3818 */
3819 assertA(0 == archive_read_next_header(a, &ae));
3820 assertEqualString("testdir", archive_entry_pathname(ae));
3821 assertA((int)archive_entry_mtime(ae));
3822 assertA((int)archive_entry_ctime(ae));
3823 assertA((int)archive_entry_atime(ae));
3824 assertEqualInt(0, archive_entry_size(ae));
3825 assertEqualInt(16877, archive_entry_mode(ae));
3826 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3827 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3828
3829 /*
3830 * Sixteenth header.
3831 */
3832 assertA(0 == archive_read_next_header(a, &ae));
3833 assertEqualString("testemptydir", archive_entry_pathname(ae));
3834 assertA((int)archive_entry_mtime(ae));
3835 assertA((int)archive_entry_ctime(ae));
3836 assertA((int)archive_entry_atime(ae));
3837 assertEqualInt(0, archive_entry_size(ae));
3838 assertEqualInt(16877, archive_entry_mode(ae));
3839 assertEqualInt(archive_entry_is_encrypted(ae), 0);
3840 assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
3841
3842 /* Test EOF */
3843 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
3844 assertEqualIntA(a, 16, archive_file_count(a));
3845 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3846 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3847 }
3848
DEFINE_TEST(test_read_format_rar_endarc_huge)3849 DEFINE_TEST(test_read_format_rar_endarc_huge)
3850 {
3851 const char* reffile = "test_read_format_rar_endarc_huge.rar";
3852
3853 struct archive_entry *ae;
3854 struct archive *a;
3855
3856 extract_reference_file(reffile);
3857 assert((a = archive_read_new()) != NULL);
3858 assertA(0 == archive_read_support_filter_all(a));
3859 assertA(0 == archive_read_support_format_all(a));
3860 assertA(0 == archive_read_open_filename(a, reffile, 10240));
3861
3862 /* Test for truncation */
3863 assertA(ARCHIVE_FATAL == archive_read_next_header(a, &ae));
3864
3865 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3866 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3867 }
3868
DEFINE_TEST(test_read_format_rar_ppmd_use_after_free)3869 DEFINE_TEST(test_read_format_rar_ppmd_use_after_free)
3870 {
3871 uint8_t buf[16];
3872 const char* reffile = "test_read_format_rar_ppmd_use_after_free.rar";
3873
3874 struct archive_entry *ae;
3875 struct archive *a;
3876
3877 extract_reference_file(reffile);
3878 assert((a = archive_read_new()) != NULL);
3879 assertA(0 == archive_read_support_filter_all(a));
3880 assertA(0 == archive_read_support_format_all(a));
3881 assertA(0 == archive_read_open_filename(a, reffile, 10240));
3882
3883 assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
3884 assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
3885 assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
3886 assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
3887
3888 /* Test for truncation */
3889 assertA(ARCHIVE_FATAL == archive_read_next_header(a, &ae));
3890
3891 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3892 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3893 }
3894
DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)3895 DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)
3896 {
3897 uint8_t buf[16];
3898 const char* reffile = "test_read_format_rar_ppmd_use_after_free2.rar";
3899
3900 struct archive_entry *ae;
3901 struct archive *a;
3902
3903 extract_reference_file(reffile);
3904 assert((a = archive_read_new()) != NULL);
3905 assertA(0 == archive_read_support_filter_all(a));
3906 assertA(0 == archive_read_support_format_all(a));
3907 assertA(0 == archive_read_open_filename(a, reffile, 10240));
3908
3909 assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
3910 assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
3911 assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
3912 assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
3913
3914 /* Test EOF */
3915 assertA(ARCHIVE_FATAL == archive_read_next_header(a, &ae));
3916
3917 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3918 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3919 }
3920
DEFINE_TEST(test_read_format_rar_seek_data_cursor0)3921 DEFINE_TEST(test_read_format_rar_seek_data_cursor0)
3922 {
3923 const char* reffile = "test_read_format_rar_seek_data_cursor0.rar";
3924
3925 struct archive_entry *ae;
3926 struct archive *a;
3927
3928 extract_reference_file(reffile);
3929 assert((a = archive_read_new()) != NULL);
3930 assertA(0 == archive_read_support_filter_all(a));
3931 assertA(0 == archive_read_support_format_all(a));
3932 assertA(0 == archive_read_open_filename(a, reffile, 10240));
3933
3934 assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
3935
3936 failure("RAR seek should reject an invalid cursor state");
3937 assert(archive_seek_data(a, -1, SEEK_END) < 0);
3938
3939 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3940 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3941 }
3942
DEFINE_TEST(test_read_format_rar_newsub_huge)3943 DEFINE_TEST(test_read_format_rar_newsub_huge)
3944 {
3945 #if SIZE_MAX == UINT64_MAX
3946 skipping("not relevant on 64 bit platforms");
3947 #else
3948 const char* reffile = "test_read_format_rar_newsub_huge.rar";
3949
3950 struct archive_entry *ae;
3951 struct archive *a;
3952
3953 extract_reference_file(reffile);
3954 assert((a = archive_read_new()) != NULL);
3955 assertA(0 == archive_read_support_filter_all(a));
3956 assertA(0 == archive_read_support_format_all(a));
3957 assertA(0 == archive_read_open_filename(a, reffile, 10240));
3958
3959 /* Test for truncation */
3960 assertA(ARCHIVE_FATAL == archive_read_next_header(a, &ae));
3961
3962 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3963 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3964 #endif
3965 }
3966
DEFINE_TEST(test_read_format_rar_newsub_rr_over_1m)3967 DEFINE_TEST(test_read_format_rar_newsub_rr_over_1m)
3968 {
3969 const char* reffile = "test_read_format_rar_newsub_rr_over_1m.rar";
3970 struct archive_entry *ae;
3971 struct archive *a;
3972
3973 extract_reference_file(reffile);
3974 assert((a = archive_read_new()) != NULL);
3975 assertA(0 == archive_read_support_filter_all(a));
3976 assertA(0 == archive_read_support_format_rar(a));
3977 assertA(0 == archive_read_open_filename(a, reffile, 10240));
3978
3979 failure("RAR NEWSUB RR records larger than 1 MiB should be skipped");
3980 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
3981
3982 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
3983 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
3984 }
3985
DEFINE_TEST(test_read_format_rar_newsub_huge64)3986 DEFINE_TEST(test_read_format_rar_newsub_huge64)
3987 {
3988 static const unsigned char archive[] = {
3989 'R', 'a', 'r', '!', 0x1a, 0x07, 0x00,
3990 0x23, 0x25, 0x7a, 0x00, 0x01, 0x28, 0x00,
3991 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3992 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3993 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3994 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
3995 0x7f, 0x00, 0x00, 0x00, 0x00
3996 };
3997 struct archive_entry *ae;
3998 struct archive *a;
3999
4000 assert((a = archive_read_new()) != NULL);
4001 assertA(0 == archive_read_support_filter_all(a));
4002 assertA(0 == archive_read_support_format_rar(a));
4003 assertA(0 == archive_read_open_memory(a, archive, sizeof(archive)));
4004
4005 failure("Malformed RAR NEWSUB header should be rejected if its "
4006 "extended data is missing");
4007 assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae));
4008 assertEqualString("Invalid RAR file: Cannot read extended header data",
4009 archive_error_string(a));
4010
4011 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
4012 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
4013 }
4014
DEFINE_TEST(test_read_format_rar_symlink_huge)4015 DEFINE_TEST(test_read_format_rar_symlink_huge)
4016 {
4017 #if SIZE_MAX == UINT64_MAX
4018 skipping("not relevant on 64 bit platforms");
4019 #else
4020 const char* reffile = "test_read_format_rar_symlink_huge.rar";
4021
4022 struct archive_entry *ae;
4023 struct archive *a;
4024
4025 extract_reference_file(reffile);
4026 assert((a = archive_read_new()) != NULL);
4027 assertA(0 == archive_read_support_filter_all(a));
4028 assertA(0 == archive_read_support_format_all(a));
4029 assertA(0 == archive_read_open_filename(a, reffile, 10240));
4030
4031 /* Test for invalid entry */
4032 assertA(ARCHIVE_FATAL == archive_read_next_header(a, &ae));
4033
4034 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
4035 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
4036 #endif
4037 }
4038
DEFINE_TEST(test_read_format_rar_unbound_staticdata)4039 DEFINE_TEST(test_read_format_rar_unbound_staticdata)
4040 {
4041 const char* reffile = "test_read_format_rar_unbound_staticdata.rar";
4042
4043 struct archive_entry *ae;
4044 struct archive *a;
4045 char buf[64];
4046
4047 extract_reference_file(reffile);
4048 assert((a = archive_read_new()) != NULL);
4049 assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
4050 assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
4051 assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, reffile, 1024));
4052
4053 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
4054 assertEqualIntA(a, ARCHIVE_FAILED, archive_read_data(a, buf, 64));
4055
4056 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
4057 assertEqualInt(ARCHIVE_OK, archive_read_free(a));
4058 }
4059