summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Wilczynski <krzysztof.wilczynski@linux.com>2011-04-24 20:55:35 +0100
committerKrzysztof Wilczynski <krzysztof.wilczynski@linux.com>2011-04-24 20:55:35 +0100
commit4a72b0efde7069f76b142cc2349f4ec60001a50d (patch)
treef0c2fe1dcd5f59f04445afacaaa75834497a5c8b
parenteefd7a9fc4951b523419b207ea197a481878745d (diff)
downloadpuppet-stdlib-4a72b0efde7069f76b142cc2349f4ec60001a50d.tar.gz
puppet-stdlib-4a72b0efde7069f76b142cc2349f4ec60001a50d.tar.bz2
Adding more error checking ...
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
-rw-r--r--collect_indices.rb23
1 files changed, 18 insertions, 5 deletions
diff --git a/collect_indices.rb b/collect_indices.rb
index cd087b9..8d981cb 100644
--- a/collect_indices.rb
+++ b/collect_indices.rb
@@ -10,7 +10,8 @@ module Puppet::Parser::Functions
raise(Puppet::ParseError, "Wrong number of arguments " +
"given (#{arguments.size} for 2)") if arguments.size < 2
- array = arguments.shift
+ array = arguments.shift
+ array_size = array.size
if not array.is_a?(Array)
raise(Puppet::ParseError, 'Requires an array to work with')
@@ -29,17 +30,29 @@ module Puppet::Parser::Functions
start = m[1].to_i
stop = m[2].to_i
- raise(Puppet::ParseError, 'Stop index in given indices range ' +
- 'is smaller than the start index') if start > stop
+ if start > stop
+ raise(Puppet::ParseError, 'Stop index in given indices range ' +
+ 'is smaller than the start index')
+ elsif stop > array_size - 1 # First element is at index 0 is it not?
+ raise(Puppet::ParseError, 'Stop index in given indices range ' +
+ 'exceeds array size')
+ end
(start .. stop).each { |i| indices_list << i.to_i }
else
- if not i.match(/^\w+$/)
+ # Only positive numbers allowed ...
+ if not i.match(/^\d+$/)
raise(Puppet::ParseError, 'Unknown format of given index')
end
# In Puppet numbers are often string-encoded ...
- indices_list << i.to_i
+ i = i.to_i
+
+ if i > array_size - 1 # Same story. First element is at index 0 ...
+ raise(Puppet::ParseError, 'Given index exceeds array size')
+ end
+
+ indices_list << i
end
end