##// END OF EJS Templates
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
Jean-Philippe Lang -
r12663:4c7a76785d9f
parent child
Show More
@@ -241,9 +241,7 class CustomField < ActiveRecord::Base
241 errs << ::I18n.t('activerecord.errors.messages.blank')
241 errs << ::I18n.t('activerecord.errors.messages.blank')
242 end
242 end
243 end
243 end
244 if custom_value.value.present?
244 errs += format.validate_custom_value(custom_value)
245 errs += format.validate_custom_value(custom_value)
246 end
247 errs
245 errs
248 end
246 end
249
247
@@ -131,7 +131,8 module Redmine
131 # Returns the validation error messages for custom_value
131 # Returns the validation error messages for custom_value
132 # Should return an empty array if custom_value is valid
132 # Should return an empty array if custom_value is valid
133 def validate_custom_value(custom_value)
133 def validate_custom_value(custom_value)
134 errors = Array.wrap(custom_value.value).reject(&:blank?).map do |value|
134 values = Array.wrap(custom_value.value).reject {|value| value.to_s == ''}
135 errors = values.map do |value|
135 validate_single_value(custom_value.custom_field, value, custom_value.customized)
136 validate_single_value(custom_value.custom_field, value, custom_value.customized)
136 end
137 end
137 errors.flatten.uniq
138 errors.flatten.uniq
@@ -252,16 +253,15 module Redmine
252 class Unbounded < Base
253 class Unbounded < Base
253 def validate_single_value(custom_field, value, customized=nil)
254 def validate_single_value(custom_field, value, customized=nil)
254 errs = super
255 errs = super
255 if value.present?
256 value = value.to_s
256 unless custom_field.regexp.blank? or value =~ Regexp.new(custom_field.regexp)
257 unless custom_field.regexp.blank? or value =~ Regexp.new(custom_field.regexp)
257 errs << ::I18n.t('activerecord.errors.messages.invalid')
258 errs << ::I18n.t('activerecord.errors.messages.invalid')
258 end
259 end
259 if custom_field.min_length && value.length < custom_field.min_length
260 if custom_field.min_length && value.length < custom_field.min_length
260 errs << ::I18n.t('activerecord.errors.messages.too_short', :count => custom_field.min_length)
261 errs << ::I18n.t('activerecord.errors.messages.too_short', :count => custom_field.min_length)
261 end
262 end
262 if custom_field.max_length && custom_field.max_length > 0 && value.length > custom_field.max_length
263 if custom_field.max_length && custom_field.max_length > 0 && value.length > custom_field.max_length
263 errs << ::I18n.t('activerecord.errors.messages.too_long', :count => custom_field.max_length)
264 errs << ::I18n.t('activerecord.errors.messages.too_long', :count => custom_field.max_length)
264 end
265 end
265 end
266 errs
266 errs
267 end
267 end
@@ -528,8 +528,9 module Redmine
528 end
528 end
529
529
530 def validate_custom_value(custom_value)
530 def validate_custom_value(custom_value)
531 invalid_values = Array.wrap(custom_value.value) - Array.wrap(custom_value.value_was) - custom_value.custom_field.possible_values
531 values = Array.wrap(custom_value.value).reject {|value| value.to_s == ''}
532 if invalid_values.select(&:present?).any?
532 invalid_values = values - Array.wrap(custom_value.value_was) - custom_value.custom_field.possible_values
533 if invalid_values.any?
533 [::I18n.t('activerecord.errors.messages.inclusion')]
534 [::I18n.t('activerecord.errors.messages.inclusion')]
534 else
535 else
535 []
536 []
@@ -146,6 +146,7 class CustomFieldTest < ActiveSupport::TestCase
146
146
147 assert f.valid_field_value?(nil)
147 assert f.valid_field_value?(nil)
148 assert f.valid_field_value?('')
148 assert f.valid_field_value?('')
149 assert !f.valid_field_value?(' ')
149 assert f.valid_field_value?('a' * 2)
150 assert f.valid_field_value?('a' * 2)
150 assert !f.valid_field_value?('a')
151 assert !f.valid_field_value?('a')
151 assert !f.valid_field_value?('a' * 6)
152 assert !f.valid_field_value?('a' * 6)
@@ -156,6 +157,7 class CustomFieldTest < ActiveSupport::TestCase
156
157
157 assert f.valid_field_value?(nil)
158 assert f.valid_field_value?(nil)
158 assert f.valid_field_value?('')
159 assert f.valid_field_value?('')
160 assert !f.valid_field_value?(' ')
159 assert f.valid_field_value?('ABC')
161 assert f.valid_field_value?('ABC')
160 assert !f.valid_field_value?('abc')
162 assert !f.valid_field_value?('abc')
161 end
163 end
@@ -165,6 +167,7 class CustomFieldTest < ActiveSupport::TestCase
165
167
166 assert f.valid_field_value?(nil)
168 assert f.valid_field_value?(nil)
167 assert f.valid_field_value?('')
169 assert f.valid_field_value?('')
170 assert !f.valid_field_value?(' ')
168 assert f.valid_field_value?('1975-07-14')
171 assert f.valid_field_value?('1975-07-14')
169 assert !f.valid_field_value?('1975-07-33')
172 assert !f.valid_field_value?('1975-07-33')
170 assert !f.valid_field_value?('abc')
173 assert !f.valid_field_value?('abc')
@@ -175,6 +178,7 class CustomFieldTest < ActiveSupport::TestCase
175
178
176 assert f.valid_field_value?(nil)
179 assert f.valid_field_value?(nil)
177 assert f.valid_field_value?('')
180 assert f.valid_field_value?('')
181 assert !f.valid_field_value?(' ')
178 assert f.valid_field_value?('value2')
182 assert f.valid_field_value?('value2')
179 assert !f.valid_field_value?('abc')
183 assert !f.valid_field_value?('abc')
180 end
184 end
@@ -184,6 +188,7 class CustomFieldTest < ActiveSupport::TestCase
184
188
185 assert f.valid_field_value?(nil)
189 assert f.valid_field_value?(nil)
186 assert f.valid_field_value?('')
190 assert f.valid_field_value?('')
191 assert !f.valid_field_value?(' ')
187 assert f.valid_field_value?('123')
192 assert f.valid_field_value?('123')
188 assert f.valid_field_value?('+123')
193 assert f.valid_field_value?('+123')
189 assert f.valid_field_value?('-123')
194 assert f.valid_field_value?('-123')
@@ -195,6 +200,7 class CustomFieldTest < ActiveSupport::TestCase
195
200
196 assert f.valid_field_value?(nil)
201 assert f.valid_field_value?(nil)
197 assert f.valid_field_value?('')
202 assert f.valid_field_value?('')
203 assert !f.valid_field_value?(' ')
198 assert f.valid_field_value?('11.2')
204 assert f.valid_field_value?('11.2')
199 assert f.valid_field_value?('-6.250')
205 assert f.valid_field_value?('-6.250')
200 assert f.valid_field_value?('5')
206 assert f.valid_field_value?('5')
@@ -206,9 +212,11 class CustomFieldTest < ActiveSupport::TestCase
206
212
207 assert f.valid_field_value?(nil)
213 assert f.valid_field_value?(nil)
208 assert f.valid_field_value?('')
214 assert f.valid_field_value?('')
215 assert !f.valid_field_value?(' ')
209 assert f.valid_field_value?([])
216 assert f.valid_field_value?([])
210 assert f.valid_field_value?([nil])
217 assert f.valid_field_value?([nil])
211 assert f.valid_field_value?([''])
218 assert f.valid_field_value?([''])
219 assert !f.valid_field_value?([' '])
212
220
213 assert f.valid_field_value?('value2')
221 assert f.valid_field_value?('value2')
214 assert !f.valid_field_value?('abc')
222 assert !f.valid_field_value?('abc')
General Comments 0
You need to be logged in to leave comments. Login now