Page MenuHomePhabricator

Remove PhabricatorFile::buildFromFileDataOrHash()
ClosedPublic

Authored by epriestley on Apr 4 2017, 9:32 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Feb 9, 3:41 AM
Unknown Object (File)
Sun, Feb 9, 3:41 AM
Unknown Object (File)
Sun, Feb 9, 3:41 AM
Unknown Object (File)
Sun, Feb 9, 3:41 AM
Unknown Object (File)
Sun, Feb 2, 4:37 AM
Unknown Object (File)
Fri, Jan 31, 2:52 PM
Unknown Object (File)
Wed, Jan 29, 5:18 PM
Unknown Object (File)
Wed, Jan 29, 4:18 PM
Subscribers

Details

Summary

Ref T12464. This is a very old method which can return an existing file instead of creating a new one, if there's some existing file with the same content.

In the best case this is a bad idea. This being somewhat reasonable predates policies, temporary files, etc. Modern methods like newFromFileData() do this right: they share underlying data in storage, but not the actual File records.

Specifically, this is the case where we get into trouble:

  • I upload a private file with content "X".
  • You somehow generate a file with the same content by, say, viewing a raw diff in Differential.
  • If the diff had the same content, you get my file, but you don't have permission to see it or whatever so everything breaks and is terrible.

Just get rid of this.

Test Plan
  • Generated an SSH key.
  • Viewed a raw diff in Differential.
  • (Did not test Phragment.)

Diff Detail

Repository
rP Phabricator
Branch
files7
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 16296
Build 21665: Run Core Tests
Build 21664: arc lint + arc unit