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