From 075a6065141e2412454699ca8e7fca558c5b6b4f Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 20 Jan 2017 17:46:04 +0100 Subject: [PATCH] Chunking NG: Assemble in natural sort order of files For https://github.com/owncloud/client/pull/5476 Before this, the assembly could be bogusly in the order 0,1,10,11,2,3 etc. As per the spec "The name of every chunk should be its chunk number." https://github.com/cernbox/smashbox/blob/master/protocol/chunking.md Signed-off-by: Morris Jobke --- apps/dav/lib/Upload/AssemblyStream.php | 2 +- apps/dav/tests/unit/Upload/AssemblyStreamTest.php | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/dav/lib/Upload/AssemblyStream.php b/apps/dav/lib/Upload/AssemblyStream.php index 3a18f91677..b623f717b3 100644 --- a/apps/dav/lib/Upload/AssemblyStream.php +++ b/apps/dav/lib/Upload/AssemblyStream.php @@ -67,7 +67,7 @@ class AssemblyStream implements \Icewind\Streams\File { $nodes = $this->nodes; // http://stackoverflow.com/a/10985500 @usort($nodes, function(IFile $a, IFile $b) { - return strcmp($a->getName(), $b->getName()); + return strnatcmp($a->getName(), $b->getName()); }); $this->nodes = $nodes; diff --git a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php index 66aea40ef2..69ee52299e 100644 --- a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php +++ b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php @@ -52,6 +52,15 @@ class AssemblyStreamTest extends \Test\TestCase { function providesNodes() { $data8k = $this->makeData(8192); $dataLess8k = $this->makeData(8191); + + $tonofnodes = []; + $tonofdata = ""; + for ($i = 0; $i < 101; $i++) { + $thisdata = rand(0,100); // variable length and content + $tonofdata .= $thisdata; + array_push($tonofnodes, $this->buildNode($i,$thisdata)); + } + return[ 'one node zero bytes' => [ '', [ @@ -90,6 +99,9 @@ class AssemblyStreamTest extends \Test\TestCase { $this->buildNode('1', $data8k . 'X'), $this->buildNode('0', $data8k) ]], + 'a ton of nodes' => [ + $tonofdata, $tonofnodes + ] ]; }