siso: require a regular file in flushRegularFile's already-exist check

Before writing a file, flushRegularFile checks whether the correct
file is already on disk. matchesFileInfo compared only size and
mtime, so a stale symlink could pass the check by accident: a
symlink's lstat size is the length of its target string, and on
filesystems with coarse mtimes the timestamps can collide too. Flush
then left a symlink at a path where a regular file belongs. The TODO
in the code already pointed at the missing mode check.

Require fi.Mode().IsRegular(). A non-regular entry now falls through
to flushRemoveReason, which removes it before the write.

Change-Id: Ia575ce1e2b58036a79fdfcfa498bfce6c1d968fb
Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8037825
Reviewed-by: Yuke Liao <liaoyuke@google.com>
Auto-Submit: Philipp Wollermann <philwo@google.com>
Commit-Queue: Philipp Wollermann <philwo@google.com>
2 files changed
tree: 6bf8a5538ee5110e05fa095b6686a85963dc42a5
  1. bench/
  2. gong/
  3. hashigo/
  4. infra/
  5. kajiya/
  6. kzipinfo/
  7. remote-apis/
  8. runmc/
  9. siso/
  10. .gitignore
  11. .golangci.yml
  12. .style.yapf
  13. BUILD_OWNERS
  14. BUILD_TEAM_OWNERS
  15. CONTRIBUTING.md
  16. LICENSE
  17. OWNERS
  18. PRESUBMIT.py
  19. README.md
  20. WATCHLISTS
README.md

build.git repository

This repository contains tools developed and owned by the Chrome Build Team.

Quick start

The steps for getting the code are:

  1. Install depot_tools
  2. Run git clone https://chromium.googlesource.com/build

We use the standard Go module workflow to work on our projects.

Links