14482: Stricter token regexes.
authorLucas Di Pentima <ldipentima@veritasgenetics.com>
Fri, 18 Jan 2019 23:24:43 +0000 (20:24 -0300)
committerLucas Di Pentima <ldipentima@veritasgenetics.com>
Fri, 18 Jan 2019 23:24:43 +0000 (20:24 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

sdk/ruby/lib/arvados/keep.rb
sdk/ruby/test/test_keep_manifest.rb

index 782b274b0a81e41e0305964d153c65d6a95ba1ad..458af53a748834f6f0eb22942b07c16a6187e029 100644 (file)
@@ -101,11 +101,11 @@ module Keep
   end
 
   class Manifest
-    STREAM_TOKEN_REGEXP = /^[^\000-\040]+$/
+    STREAM_TOKEN_REGEXP = /^([^\000-\040\\]|\\[0-3][0-7][0-7])+$/
     STREAM_NAME_REGEXP = /^(\.)(\/[^\/]+)*$/
 
     EMPTY_DIR_TOKEN_REGEXP = /^0:0:\.$/ # The exception when a file can have '.' as a name
-    FILE_TOKEN_REGEXP = /^[[:digit:]]+:[[:digit:]]+:[^\000-\040]+$/
+    FILE_TOKEN_REGEXP = /^[[:digit:]]+:[[:digit:]]+:([^\000-\040\\]|\\[0-3][0-7][0-7])+$/
     FILE_NAME_REGEXP = /^[[:digit:]]+:[[:digit:]]+:([^\/]+(\/[^\/]+)*)$/
 
     NON_8BIT_ENCODED_CHAR = /[^\\]\\[4-7][0-7][0-7]/
index 813b3ed82be2d64679a0d6e025231a5f60d2e9f1..eee8b39699078681d89ad331fe6c74cfe6f47079 100644 (file)
@@ -451,7 +451,8 @@ class ManifestTest < Minitest::Test
     [true, ".\\057Data d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n"],
     [true, "\\056\\057Data d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n"],
     [true, "./\\134444 d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n"],
-    [true, "./\\\\444 d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n"],
+    [false, "./\\\\444 d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"./\\\\\\\\444\""],
     [true, "./\\011foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n"],
     [false, "./\\011/.. d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
       "Manifest invalid for stream 1: missing or invalid stream name \"./\\\\011/..\""],
@@ -465,6 +466,22 @@ class ManifestTest < Minitest::Test
       "Manifest invalid for stream 1: >8-bit encoded chars not allowed on stream token \"./\\\\444\""],
     [false, "./\tfoo d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
       "Manifest invalid for stream 1: missing or invalid stream name \"./\\tfoo\""],
+    [false, "./foo\\ d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"./foo\\\\\""],
+    [false, "./foo\\r d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"./foo\\\\r\""],
+    [false, "./foo\\444 d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
+      "Manifest invalid for stream 1: >8-bit encoded chars not allowed on stream token \"./foo\\\\444\""],
+    [false, "./foo\\888 d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"./foo\\\\888\""],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\\\n",
+      "Manifest invalid for stream 1: invalid file token \"0:0:foo\\\\\""],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\\r\n",
+      "Manifest invalid for stream 1: invalid file token \"0:0:foo\\\\r\""],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\\444\n",
+      "Manifest invalid for stream 1: >8-bit encoded chars not allowed on file token \"0:0:foo\\\\444\""],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\\888\n",
+      "Manifest invalid for stream 1: invalid file token \"0:0:foo\\\\888\""],
     [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\\057/bar\n",
       "Manifest invalid for stream 1: invalid file token \"0:0:foo\\\\057/bar\""],
     [false, ".\\057/Data d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo\n",