Skip to content
This repository
Browse code

FIX: Prevent cache corruption by moving before tags write.

A side effect of xolox#easytags#write_tagsfile() is that the entries argument is joined together. This then causes problems in s:cache_tagged_files_in(), where the filename element is addressed via entry[1]. When the entries have been flattened, this accesses a single character, and then the cache is corrupted.

To fix this, move the cache update before the writing of the tags file. This avoids the need to make a copy of the entries before flattening them.
  • Loading branch information...
commit 10afe7fc2610ebfa5279a140fcd4aead61033175 1 parent 44b0487
Ingo Karkat authored November 26, 2012

Showing 1 changed file with 6 additions and 4 deletions. Show diff stats Hide diff stats

  1. 10  autoload/xolox/easytags.vim
10  autoload/xolox/easytags.vim
@@ -246,15 +246,17 @@ function! s:filter_merge_tags(filter_tags, tagsfile, output, context) " {{{3
246 246
     call filter(entries, join(filters, ' && '))
247 247
   endif
248 248
   let num_filtered = num_old_entries - len(entries)
249  
-  " Merge old/new tags and write tags file.
  249
+  " Merge old/new tags.
250 250
   call extend(entries, a:output)
  251
+  " We've already read the tags file, cache the tagged files before the entries
  252
+  " get flattened by the write.
  253
+  let fname = s:canonicalize(a:tagsfile, a:context)
  254
+  call s:cache_tagged_files_in(fname, getftime(fname), entries, a:context)
  255
+  " And write tags file.
251 256
   if !xolox#easytags#write_tagsfile(a:tagsfile, headers, entries)
252 257
     let msg = "Failed to write filtered tags file %s!"
253 258
     throw printf(msg, fnamemodify(a:tagsfile, ':~'))
254 259
   endif
255  
-  " We've already read the tags file, might as well cache the tagged files :-)
256  
-  let fname = s:canonicalize(a:tagsfile, a:context)
257  
-  call s:cache_tagged_files_in(fname, getftime(fname), entries, a:context)
258 260
   return num_filtered
259 261
 endfunction
260 262
 

0 notes on commit 10afe7f

Please sign in to comment.
Something went wrong with that request. Please try again.