rugged 0.24.6.1 → 0.25.0b1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_repo.c +44 -36
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/CMakeLists.txt +10 -21
  5. data/vendor/libgit2/include/git2/checkout.h +0 -7
  6. data/vendor/libgit2/include/git2/commit.h +46 -0
  7. data/vendor/libgit2/include/git2/common.h +1 -16
  8. data/vendor/libgit2/include/git2/odb.h +47 -1
  9. data/vendor/libgit2/include/git2/version.h +2 -2
  10. data/vendor/libgit2/src/array.h +0 -40
  11. data/vendor/libgit2/src/blame.c +3 -8
  12. data/vendor/libgit2/src/blame_git.c +9 -20
  13. data/vendor/libgit2/src/checkout.c +5 -13
  14. data/vendor/libgit2/src/commit.c +132 -52
  15. data/vendor/libgit2/src/common.h +1 -1
  16. data/vendor/libgit2/src/config_cache.c +1 -2
  17. data/vendor/libgit2/src/config_file.c +20 -14
  18. data/vendor/libgit2/src/delta-apply.c +5 -36
  19. data/vendor/libgit2/src/delta-apply.h +0 -12
  20. data/vendor/libgit2/src/describe.c +1 -2
  21. data/vendor/libgit2/src/diff_tform.c +3 -5
  22. data/vendor/libgit2/src/filebuf.c +1 -6
  23. data/vendor/libgit2/src/global.c +8 -28
  24. data/vendor/libgit2/src/global.h +0 -1
  25. data/vendor/libgit2/src/ignore.c +19 -56
  26. data/vendor/libgit2/src/index.c +8 -27
  27. data/vendor/libgit2/src/indexer.c +7 -11
  28. data/vendor/libgit2/src/iterator.c +2 -2
  29. data/vendor/libgit2/src/merge.c +0 -1
  30. data/vendor/libgit2/src/mwindow.c +19 -8
  31. data/vendor/libgit2/src/mwindow.h +2 -1
  32. data/vendor/libgit2/src/object.c +6 -3
  33. data/vendor/libgit2/src/odb.c +188 -48
  34. data/vendor/libgit2/src/odb_loose.c +1 -1
  35. data/vendor/libgit2/src/odb_pack.c +3 -0
  36. data/vendor/libgit2/src/openssl_stream.c +27 -60
  37. data/vendor/libgit2/src/openssl_stream.h +0 -106
  38. data/vendor/libgit2/src/pack-objects.c +2 -4
  39. data/vendor/libgit2/src/pack.c +9 -5
  40. data/vendor/libgit2/src/posix.c +0 -7
  41. data/vendor/libgit2/src/posix.h +0 -1
  42. data/vendor/libgit2/src/push.c +6 -6
  43. data/vendor/libgit2/src/refdb_fs.c +0 -1
  44. data/vendor/libgit2/src/refs.c +0 -3
  45. data/vendor/libgit2/src/refspec.c +2 -4
  46. data/vendor/libgit2/src/remote.c +5 -15
  47. data/vendor/libgit2/src/repository.c +21 -29
  48. data/vendor/libgit2/src/settings.c +1 -23
  49. data/vendor/libgit2/src/stransport_stream.c +9 -15
  50. data/vendor/libgit2/src/submodule.c +2 -3
  51. data/vendor/libgit2/src/sysdir.c +47 -41
  52. data/vendor/libgit2/src/sysdir.h +5 -0
  53. data/vendor/libgit2/src/tag.c +2 -8
  54. data/vendor/libgit2/src/thread-utils.h +51 -5
  55. data/vendor/libgit2/src/transports/http.c +3 -3
  56. data/vendor/libgit2/src/transports/smart_pkt.c +4 -13
  57. data/vendor/libgit2/src/transports/smart_protocol.c +17 -61
  58. data/vendor/libgit2/src/tree.c +100 -83
  59. data/vendor/libgit2/src/tree.h +5 -4
  60. data/vendor/libgit2/src/unix/map.c +0 -5
  61. data/vendor/libgit2/src/util.c +3 -3
  62. data/vendor/libgit2/src/win32/map.c +5 -24
  63. data/vendor/libgit2/src/win32/precompiled.h +1 -1
  64. data/vendor/libgit2/src/win32/{thread.c → pthread.c} +80 -50
  65. data/vendor/libgit2/src/win32/pthread.h +92 -0
  66. data/vendor/libgit2/src/xdiff/xprepare.c +1 -2
  67. metadata +7 -8
  68. data/vendor/libgit2/src/unix/pthread.h +0 -54
  69. data/vendor/libgit2/src/win32/thread.h +0 -62
@@ -49,37 +49,6 @@ int git__delta_read_header(
49
49
  return 0;
50
50
  }
51
51
 
52
- #define DELTA_HEADER_BUFFER_LEN 16
53
- int git__delta_read_header_fromstream(size_t *base_sz, size_t *res_sz, git_packfile_stream *stream)
54
- {
55
- static const size_t buffer_len = DELTA_HEADER_BUFFER_LEN;
56
- unsigned char buffer[DELTA_HEADER_BUFFER_LEN];
57
- const unsigned char *delta, *delta_end;
58
- size_t len;
59
- ssize_t read;
60
-
61
- len = read = 0;
62
- while (len < buffer_len) {
63
- read = git_packfile_stream_read(stream, &buffer[len], buffer_len - len);
64
-
65
- if (read == 0)
66
- break;
67
-
68
- if (read == GIT_EBUFS)
69
- continue;
70
-
71
- len += read;
72
- }
73
-
74
- delta = buffer;
75
- delta_end = delta + len;
76
- if ((hdr_sz(base_sz, &delta, delta_end) < 0) ||
77
- (hdr_sz(res_sz, &delta, delta_end) < 0))
78
- return -1;
79
-
80
- return 0;
81
- }
82
-
83
52
  int git__delta_apply(
84
53
  git_rawobj *out,
85
54
  const unsigned char *base,
@@ -121,13 +90,13 @@ int git__delta_apply(
121
90
  size_t off = 0, len = 0;
122
91
 
123
92
  if (cmd & 0x01) off = *delta++;
124
- if (cmd & 0x02) off |= *delta++ << 8UL;
125
- if (cmd & 0x04) off |= *delta++ << 16UL;
126
- if (cmd & 0x08) off |= *delta++ << 24UL;
93
+ if (cmd & 0x02) off |= *delta++ << 8;
94
+ if (cmd & 0x04) off |= *delta++ << 16;
95
+ if (cmd & 0x08) off |= *delta++ << 24;
127
96
 
128
97
  if (cmd & 0x10) len = *delta++;
129
- if (cmd & 0x20) len |= *delta++ << 8UL;
130
- if (cmd & 0x40) len |= *delta++ << 16UL;
98
+ if (cmd & 0x20) len |= *delta++ << 8;
99
+ if (cmd & 0x40) len |= *delta++ << 16;
131
100
  if (!len) len = 0x10000;
132
101
 
133
102
  if (base_len < off + len || res_sz < len)
@@ -8,7 +8,6 @@
8
8
  #define INCLUDE_delta_apply_h__
9
9
 
10
10
  #include "odb.h"
11
- #include "pack.h"
12
11
 
13
12
  /**
14
13
  * Apply a git binary delta to recover the original content.
@@ -48,15 +47,4 @@ extern int git__delta_read_header(
48
47
  size_t *base_sz,
49
48
  size_t *res_sz);
50
49
 
51
- /**
52
- * Read the header of a git binary delta
53
- *
54
- * This variant reads just enough from the packfile stream to read the
55
- * delta header.
56
- */
57
- extern int git__delta_read_header_fromstream(
58
- size_t *base_sz,
59
- size_t *res_sz,
60
- git_packfile_stream *stream);
61
-
62
50
  #endif
@@ -582,8 +582,7 @@ static int describe(
582
582
  best = (struct possible_tag *)git_vector_get(&all_matches, 0);
583
583
 
584
584
  if (gave_up_on) {
585
- if ((error = git_pqueue_insert(&list, gave_up_on)) < 0)
586
- goto cleanup;
585
+ git_pqueue_insert(&list, gave_up_on);
587
586
  seen_commits--;
588
587
  }
589
588
  if ((error = finish_depth_computation(
@@ -261,7 +261,7 @@ static int normalize_find_opts(
261
261
  if (!given ||
262
262
  (given->flags & GIT_DIFF_FIND_ALL) == GIT_DIFF_FIND_BY_CONFIG)
263
263
  {
264
- if (cfg) {
264
+ if (diff->repo) {
265
265
  char *rule =
266
266
  git_config__get_string_force(cfg, "diff.renames", "true");
267
267
  int boolval;
@@ -318,10 +318,8 @@ static int normalize_find_opts(
318
318
  #undef USE_DEFAULT
319
319
 
320
320
  if (!opts->rename_limit) {
321
- if (cfg) {
322
- opts->rename_limit = git_config__get_int_force(
323
- cfg, "diff.renamelimit", DEFAULT_RENAME_LIMIT);
324
- }
321
+ opts->rename_limit = git_config__get_int_force(
322
+ cfg, "diff.renamelimit", DEFAULT_RENAME_LIMIT);
325
323
 
326
324
  if (opts->rename_limit <= 0)
327
325
  opts->rename_limit = DEFAULT_RENAME_LIMIT;
@@ -70,7 +70,6 @@ static int lock_file(git_filebuf *file, int flags, mode_t mode)
70
70
  git_file source;
71
71
  char buffer[FILEIO_BUFSIZE];
72
72
  ssize_t read_bytes;
73
- int error = 0;
74
73
 
75
74
  source = p_open(file->path_original, O_RDONLY);
76
75
  if (source < 0) {
@@ -81,8 +80,7 @@ static int lock_file(git_filebuf *file, int flags, mode_t mode)
81
80
  }
82
81
 
83
82
  while ((read_bytes = p_read(source, buffer, sizeof(buffer))) > 0) {
84
- if ((error = p_write(file->fd, buffer, read_bytes)) < 0)
85
- break;
83
+ p_write(file->fd, buffer, read_bytes);
86
84
  if (file->compute_digest)
87
85
  git_hash_update(&file->digest, buffer, read_bytes);
88
86
  }
@@ -92,9 +90,6 @@ static int lock_file(git_filebuf *file, int flags, mode_t mode)
92
90
  if (read_bytes < 0) {
93
91
  giterr_set(GITERR_OS, "Failed to read file '%s'", file->path_original);
94
92
  return -1;
95
- } else if (error < 0) {
96
- giterr_set(GITERR_OS, "Failed to write file '%s'", file->path_lock);
97
- return -1;
98
93
  }
99
94
  }
100
95
 
@@ -27,7 +27,6 @@ static git_global_shutdown_fn git__shutdown_callbacks[MAX_SHUTDOWN_CB];
27
27
  static git_atomic git__n_shutdown_callbacks;
28
28
  static git_atomic git__n_inits;
29
29
  char *git__user_agent;
30
- char *git__ssl_ciphers;
31
30
 
32
31
  void git__on_shutdown(git_global_shutdown_fn callback)
33
32
  {
@@ -59,9 +58,8 @@ static int init_common(void)
59
58
  if ((ret = git_hash_global_init()) == 0 &&
60
59
  (ret = git_sysdir_global_init()) == 0 &&
61
60
  (ret = git_filter_global_init()) == 0 &&
62
- (ret = git_transport_ssh_global_init()) == 0 &&
63
- (ret = git_openssl_stream_global_init()) == 0)
64
- ret = git_mwindow_global_init();
61
+ (ret = git_transport_ssh_global_init()) == 0)
62
+ ret = git_openssl_stream_global_init();
65
63
 
66
64
  GIT_MEMORY_BARRIER;
67
65
 
@@ -85,7 +83,11 @@ static void shutdown_common(void)
85
83
  }
86
84
 
87
85
  git__free(git__user_agent);
88
- git__free(git__ssl_ciphers);
86
+
87
+ #if defined(GIT_MSVC_CRTDBG)
88
+ git_win32__crtdbg_stacktrace_cleanup();
89
+ git_win32__stack_cleanup();
90
+ #endif
89
91
  }
90
92
 
91
93
  /**
@@ -133,7 +135,7 @@ static int synchronized_threads_init(void)
133
135
 
134
136
  _tls_index = TlsAlloc();
135
137
 
136
- git_threads_init();
138
+ win32_pthread_initialize();
137
139
 
138
140
  if (git_mutex_init(&git__mwindow_mutex))
139
141
  return -1;
@@ -177,11 +179,6 @@ int git_libgit2_shutdown(void)
177
179
 
178
180
  TlsFree(_tls_index);
179
181
  git_mutex_free(&git__mwindow_mutex);
180
-
181
- #if defined(GIT_MSVC_CRTDBG)
182
- git_win32__crtdbg_stacktrace_cleanup();
183
- git_win32__stack_cleanup();
184
- #endif
185
182
  }
186
183
 
187
184
  /* Exit the lock */
@@ -225,23 +222,6 @@ void git__free_tls_data(void)
225
222
  TlsSetValue(_tls_index, NULL);
226
223
  }
227
224
 
228
- BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
229
- {
230
- GIT_UNUSED(hInstDll);
231
- GIT_UNUSED(lpvReserved);
232
-
233
- /* This is how Windows lets us know our thread is being shut down */
234
- if (fdwReason == DLL_THREAD_DETACH) {
235
- git__free_tls_data();
236
- }
237
-
238
- /*
239
- * Windows pays attention to this during library loading. We don't do anything
240
- * so we trivially succeed.
241
- */
242
- return TRUE;
243
- }
244
-
245
225
  #elif defined(GIT_THREADS) && defined(_POSIX_THREADS)
246
226
 
247
227
  static pthread_key_t _tls_key;
@@ -36,6 +36,5 @@ extern void git__on_shutdown(git_global_shutdown_fn callback);
36
36
  extern void git__free_tls_data(void);
37
37
 
38
38
  extern const char *git_libgit2__user_agent(void);
39
- extern const char *git_libgit2__ssl_ciphers(void);
40
39
 
41
40
  #endif
@@ -11,64 +11,35 @@
11
11
  #define GIT_IGNORE_DEFAULT_RULES ".\n..\n.git\n"
12
12
 
13
13
  /**
14
- * A negative ignore pattern can negate a positive one without
15
- * wildcards if it is a basename only and equals the basename of
16
- * the positive pattern. Thus
14
+ * A negative ignore pattern can match a positive one without
15
+ * wildcards if its pattern equals the tail of the positive
16
+ * pattern. Thus
17
17
  *
18
18
  * foo/bar
19
19
  * !bar
20
20
  *
21
- * would result in foo/bar being unignored again while
22
- *
23
- * moo/foo/bar
24
- * !foo/bar
25
- *
26
- * would do nothing. The reverse also holds true: a positive
27
- * basename pattern can be negated by unignoring the basename in
28
- * subdirectories. Thus
29
- *
30
- * bar
31
- * !foo/bar
32
- *
33
- * would result in foo/bar being unignored again. As with the
34
- * first case,
35
- *
36
- * foo/bar
37
- * !moo/foo/bar
38
- *
39
- * would do nothing, again.
21
+ * would result in foo/bar being unignored again.
40
22
  */
41
23
  static int does_negate_pattern(git_attr_fnmatch *rule, git_attr_fnmatch *neg)
42
24
  {
43
- git_attr_fnmatch *longer, *shorter;
44
25
  char *p;
45
26
 
46
27
  if ((rule->flags & GIT_ATTR_FNMATCH_NEGATIVE) == 0
47
28
  && (neg->flags & GIT_ATTR_FNMATCH_NEGATIVE) != 0) {
48
-
49
- /* If lengths match we need to have an exact match */
50
- if (rule->length == neg->length) {
51
- return strcmp(rule->pattern, neg->pattern) == 0;
52
- } else if (rule->length < neg->length) {
53
- shorter = rule;
54
- longer = neg;
55
- } else {
56
- shorter = neg;
57
- longer = rule;
58
- }
59
-
60
- /* Otherwise, we need to check if the shorter
61
- * rule is a basename only (that is, it contains
62
- * no path separator) and, if so, if it
63
- * matches the tail of the longer rule */
64
- p = longer->pattern + longer->length - shorter->length;
65
-
66
- if (p[-1] != '/')
67
- return false;
68
- if (memchr(shorter->pattern, '/', shorter->length) != NULL)
29
+ /*
30
+ * no chance of matching if rule is shorter than
31
+ * the negated one
32
+ */
33
+ if (rule->length < neg->length)
69
34
  return false;
70
35
 
71
- return memcmp(p, shorter->pattern, shorter->length) == 0;
36
+ /*
37
+ * shift pattern so its tail aligns with the
38
+ * negated pattern
39
+ */
40
+ p = rule->pattern + rule->length - neg->length;
41
+ if (strcmp(p, neg->pattern) == 0)
42
+ return true;
72
43
  }
73
44
 
74
45
  return false;
@@ -292,18 +263,10 @@ int git_ignore__for_path(
292
263
  goto cleanup;
293
264
 
294
265
  /* given a unrooted path in a non-bare repo, resolve it */
295
- if (workdir && git_path_root(path) < 0) {
296
- git_buf local = GIT_BUF_INIT;
297
-
298
- if ((error = git_path_dirname_r(&local, path)) < 0 ||
299
- (error = git_path_resolve_relative(&local, 0)) < 0 ||
300
- (error = git_path_to_dir(&local)) < 0 ||
301
- (error = git_buf_joinpath(&ignores->dir, workdir, local.ptr)) < 0)
302
- {;} /* Nothing, we just want to stop on the first error */
303
- git_buf_free(&local);
304
- } else {
266
+ if (workdir && git_path_root(path) < 0)
267
+ error = git_path_find_dir(&ignores->dir, path, workdir);
268
+ else
305
269
  error = git_buf_joinpath(&ignores->dir, path, "");
306
- }
307
270
  if (error < 0)
308
271
  goto cleanup;
309
272
 
@@ -505,11 +505,10 @@ static int index_remove_entry(git_index *index, size_t pos)
505
505
  int error = 0;
506
506
  git_index_entry *entry = git_vector_get(&index->entries, pos);
507
507
 
508
- if (entry != NULL) {
508
+ if (entry != NULL)
509
509
  git_tree_cache_invalidate_path(index->tree, entry->path);
510
- DELETE_IN_MAP(index, entry);
511
- }
512
510
 
511
+ DELETE_IN_MAP(index, entry);
513
512
  error = git_vector_remove(&index->entries, pos);
514
513
 
515
514
  if (!error) {
@@ -964,20 +963,14 @@ static int index_entry_reuc_init(git_index_reuc_entry **reuc_out,
964
963
  *reuc_out = reuc = reuc_entry_alloc(path);
965
964
  GITERR_CHECK_ALLOC(reuc);
966
965
 
967
- if ((reuc->mode[0] = ancestor_mode) > 0) {
968
- assert(ancestor_oid);
966
+ if ((reuc->mode[0] = ancestor_mode) > 0)
969
967
  git_oid_cpy(&reuc->oid[0], ancestor_oid);
970
- }
971
968
 
972
- if ((reuc->mode[1] = our_mode) > 0) {
973
- assert(our_oid);
969
+ if ((reuc->mode[1] = our_mode) > 0)
974
970
  git_oid_cpy(&reuc->oid[1], our_oid);
975
- }
976
971
 
977
- if ((reuc->mode[2] = their_mode) > 0) {
978
- assert(their_oid);
972
+ if ((reuc->mode[2] = their_mode) > 0)
979
973
  git_oid_cpy(&reuc->oid[2], their_oid);
980
- }
981
974
 
982
975
  return 0;
983
976
  }
@@ -2837,7 +2830,7 @@ static int read_tree_cb(
2837
2830
  return -1;
2838
2831
 
2839
2832
  entry->mode = tentry->attr;
2840
- git_oid_cpy(&entry->id, git_tree_entry_id(tentry));
2833
+ entry->id = tentry->oid;
2841
2834
 
2842
2835
  /* look for corresponding old entry and copy data to new entry */
2843
2836
  if (data->old_entries != NULL &&
@@ -2969,8 +2962,6 @@ int git_index_read_index(
2969
2962
  *remove_entry = NULL;
2970
2963
  int diff;
2971
2964
 
2972
- error = 0;
2973
-
2974
2965
  if (old_entry && new_entry)
2975
2966
  diff = git_index_entry_cmp(old_entry, new_entry);
2976
2967
  else if (!old_entry && new_entry)
@@ -2988,8 +2979,7 @@ int git_index_read_index(
2988
2979
  /* Path and stage are equal, if the OID is equal, keep it to
2989
2980
  * keep the stat cache data.
2990
2981
  */
2991
- if (git_oid_equal(&old_entry->id, &new_entry->id) &&
2992
- old_entry->mode == new_entry->mode) {
2982
+ if (git_oid_equal(&old_entry->id, &new_entry->id)) {
2993
2983
  add_entry = (git_index_entry *)old_entry;
2994
2984
  } else {
2995
2985
  dup_entry = (git_index_entry *)new_entry;
@@ -3000,17 +2990,8 @@ int git_index_read_index(
3000
2990
  if (dup_entry) {
3001
2991
  if ((error = index_entry_dup_nocache(&add_entry, index, dup_entry)) < 0)
3002
2992
  goto done;
3003
-
3004
- index_entry_adjust_namemask(add_entry,
3005
- ((struct entry_internal *)add_entry)->pathlen);
3006
2993
  }
3007
2994
 
3008
- /* invalidate this path in the tree cache if this is new (to
3009
- * invalidate the parent trees)
3010
- */
3011
- if (dup_entry && !remove_entry && index->tree)
3012
- git_tree_cache_invalidate_path(index->tree, dup_entry->path);
3013
-
3014
2995
  if (add_entry) {
3015
2996
  if ((error = git_vector_insert(&new_entries, add_entry)) == 0)
3016
2997
  INSERT_IN_MAP_EX(index, new_entries_map, add_entry, error);
@@ -3021,7 +3002,7 @@ int git_index_read_index(
3021
3002
 
3022
3003
  if (error < 0) {
3023
3004
  giterr_set(GITERR_INDEX, "failed to insert entry");
3024
- goto done;
3005
+ return error;
3025
3006
  }
3026
3007
 
3027
3008
  if (diff <= 0) {
@@ -449,7 +449,7 @@ static void hash_partially(git_indexer *idx, const uint8_t *data, size_t size)
449
449
  static int write_at(git_indexer *idx, const void *data, git_off_t offset, size_t size)
450
450
  {
451
451
  git_file fd = idx->pack->mwf.fd;
452
- size_t mmap_alignment;
452
+ size_t page_size;
453
453
  size_t page_offset;
454
454
  git_off_t page_start;
455
455
  unsigned char *map_data;
@@ -458,11 +458,11 @@ static int write_at(git_indexer *idx, const void *data, git_off_t offset, size_t
458
458
 
459
459
  assert(data && size);
460
460
 
461
- if ((error = git__mmap_alignment(&mmap_alignment)) < 0)
461
+ if ((error = git__page_size(&page_size)) < 0)
462
462
  return error;
463
463
 
464
- /* the offset needs to be at the mmap boundary for the platform */
465
- page_offset = offset % mmap_alignment;
464
+ /* the offset needs to be at the beginning of the a page boundary */
465
+ page_offset = offset % page_size;
466
466
  page_start = offset - page_offset;
467
467
 
468
468
  if ((error = p_mmap(&map, page_offset + size, GIT_PROT_WRITE, GIT_MAP_SHARED, fd, page_start)) < 0)
@@ -777,6 +777,7 @@ static int fix_thin_pack(git_indexer *idx, git_transfer_progress *stats)
777
777
 
778
778
  curpos = delta->delta_off;
779
779
  error = git_packfile_unpack_header(&size, &type, &idx->pack->mwf, &w, &curpos);
780
+ git_mwindow_close(&w);
780
781
  if (error < 0)
781
782
  return error;
782
783
 
@@ -913,17 +914,12 @@ int git_indexer_commit(git_indexer *idx, git_transfer_progress *stats)
913
914
  git_filebuf index_file = {0};
914
915
  void *packfile_trailer;
915
916
 
916
- if (!idx->parsed_header) {
917
- giterr_set(GITERR_INDEXER, "incomplete pack header");
918
- return -1;
919
- }
920
-
921
917
  if (git_hash_ctx_init(&ctx) < 0)
922
918
  return -1;
923
919
 
924
920
  /* Test for this before resolve_deltas(), as it plays with idx->off */
925
- if (idx->off + 20 < idx->pack->mwf.size) {
926
- giterr_set(GITERR_INDEXER, "unexpected data at the end of the pack");
921
+ if (idx->off < idx->pack->mwf.size - 20) {
922
+ giterr_set(GITERR_INDEXER, "Unexpected data at the end of the pack");
927
923
  return -1;
928
924
  }
929
925