[ARVADOS] created: c743a5376ef8662c92feb7dd6a4f9bc07818ecaf

Git user git at public.curoverse.com
Wed Jun 1 10:35:26 EDT 2016


        at  c743a5376ef8662c92feb7dd6a4f9bc07818ecaf (commit)


commit c743a5376ef8662c92feb7dd6a4f9bc07818ecaf
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Jun 1 10:35:21 2016 -0400

    9216: Require size hints in manifest validation.

diff --git a/sdk/ruby/lib/arvados/keep.rb b/sdk/ruby/lib/arvados/keep.rb
index 489eeee..4797238 100644
--- a/sdk/ruby/lib/arvados/keep.rb
+++ b/sdk/ruby/lib/arvados/keep.rb
@@ -2,23 +2,11 @@ module Keep
   class Locator
     # A Locator is used to parse and manipulate Keep locator strings.
     #
-    # Locators obey the following syntax:
-    #
-    #   locator      ::= address hint*
-    #   address      ::= digest size-hint
-    #   digest       ::= <32 hexadecimal digits>
-    #   size-hint    ::= "+" [0-9]+
-    #   hint         ::= "+" hint-type hint-content
-    #   hint-type    ::= [A-Z]
-    #   hint-content ::= [A-Za-z0-9 at _-]+
-    #
-    # Individual hints may have their own required format:
-    #
-    #   sign-hint      ::= "+A" <40 lowercase hex digits> "@" sign-timestamp
-    #   sign-timestamp ::= <8 lowercase hex digits>
+    # Locator format is documented at
+    # https://dev.arvados.org/projects/arvados/wiki/Keep_locator_format
     attr_reader :hash, :hints, :size
 
-    LOCATOR_REGEXP = /^([[:xdigit:]]{32})(\+([[:digit:]]+))?((\+([[:upper:]][[:alnum:]@_-]*))+)?\z/
+    LOCATOR_REGEXP = /^([0-9a-f]{32})(\+([0-9]+))((\+([A-Z][-A-Za-z0-9 at _]*))+)?\z/
 
     def initialize(hasharg, sizearg, hintarg)
       @hash = hasharg
diff --git a/sdk/ruby/test/test_keep_manifest.rb b/sdk/ruby/test/test_keep_manifest.rb
index fa1dc3f..6a696a4 100644
--- a/sdk/ruby/test/test_keep_manifest.rb
+++ b/sdk/ruby/test/test_keep_manifest.rb
@@ -249,6 +249,7 @@ class ManifestTest < Minitest::Test
   [[false, nil],
    [false, '+0'],
    [false, 'd41d8cd98f00b204e9800998ecf8427'],
+   [false, 'd41d8cd98f00b204e9800998ecf8427e'],
    [false, 'd41d8cd98f00b204e9800998ecf8427+0'],
    [false, 'd41d8cd98f00b204e9800998ecf8427e0'],
    [false, 'd41d8cd98f00b204e9800998ecf8427e0+0'],
@@ -262,14 +263,12 @@ class ManifestTest < Minitest::Test
    [false, 'd41d8cd98f00b204e9800998ecf8427e+0++K'],
    [false, 'd41d8cd98f00b204e9800998ecf8427e+0+K++'],
    [false, 'd41d8cd98f00b204e9800998ecf8427e+0+K++Z'],
-   [true, 'd41d8cd98f00b204e9800998ecf8427e', nil,nil,nil],
+   [false, 'd41d8cd98f00b204e9800998ecf8427e+Fizz+Buzz'],
+   [false, 'd41d8cd98f00b204e9800998ecf8427e+Fizz+0+Buzz'],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0', '+0','0',nil],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0+Fizz+Buzz','+0','0','+Fizz+Buzz'],
-   [true, 'd41d8cd98f00b204e9800998ecf8427e+Fizz+Buzz', nil,nil,'+Fizz+Buzz'],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo', '+0','0','+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo'],
-   [true, 'd41d8cd98f00b204e9800998ecf8427e+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo', nil,nil,'+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo'],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0+Z', '+0','0','+Z'],
-   [true, 'd41d8cd98f00b204e9800998ecf8427e+Z', nil,nil,'+Z'],
   ].each do |ok, locator, match2, match3, match4|
     define_method "test_LOCATOR_REGEXP_on_#{locator.inspect}" do
       match = Keep::Locator::LOCATOR_REGEXP.match locator
@@ -300,7 +299,7 @@ class ManifestTest < Minitest::Test
     [false, " ", "Invalid manifest: does not end with newline"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n"],
-    [true, ". d41d8cd98f00b204e9800998ecf8427e a41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n"], # 2 locators
+    [true, ". d41d8cd98f00b204e9800998ecf8427e+0 a41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n"], # 2 locators
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo/bar.txt\n"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:.foo.txt\n"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:.foo\n"],
@@ -316,43 +315,45 @@ class ManifestTest < Minitest::Test
     [true, ". 00000000000000000000000000000000+0 0:0:0\n"],
     [true, ". 00000000000000000000000000000000+0 0:0:d41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000 at ffffffff\n"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000 at ffffffff 0:0:empty.txt\n"],
-    [false, '. d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt',
-      "Invalid manifest: does not end with newline"],
-    [false, "abc d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+      "missing or invalid locator"],
+    [false, '. d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt',
+      "does not end with newline"],
+    [false, "abc d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"abc\""],
-    [false, "abc/./foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, "abc/./foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"abc/./foo\""],
-    [false, "./abc/../foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, "./abc/../foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"./abc/../foo\""],
-    [false, "./abc/. d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, "./abc/. d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"./abc/.\""],
-    [false, "./abc/.. d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, "./abc/.. d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"./abc/..\""],
-    [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"./abc/./foo\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:.\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:.\n",
       "invalid file token \"0:0:.\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:..\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:..\n",
       "invalid file token \"0:0:..\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:./abc.txt\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:./abc.txt\n",
       "invalid file token \"0:0:./abc.txt\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:../abc.txt\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:../abc.txt\n",
       "invalid file token \"0:0:../abc.txt\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt/.\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt/.\n",
       "invalid file token \"0:0:abc.txt/.\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt/..\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt/..\n",
       "invalid file token \"0:0:abc.txt/..\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:a/./bc.txt\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:a/./bc.txt\n",
       "invalid file token \"0:0:a/./bc.txt\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:a/../bc.txt\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:a/../bc.txt\n",
       "invalid file token \"0:0:a/../bc.txt\""],
-    [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+    [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"./abc/./foo\""],
     [false, "d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
       "invalid stream name \"d41d8cd98f00b204e9800998ecf8427e+0\""],
     [false, ". d41d8cd98f00b204e9800998ecf8427 0:0:abc.txt\n",
       "invalid locator \"d41d8cd98f00b204e9800998ecf8427\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e\n",
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0\n",
       "Manifest invalid for stream 1: no file tokens"],
     [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n/dir1 d41d8cd98f00b204e9800998ecf842 0:0:abc.txt\n",
       "Manifest invalid for stream 2: missing or invalid stream name \"/dir1\""],

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list