mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Fix md5 nesting
This commit is contained in:
		| @@ -11,40 +11,28 @@ module Linguist | |||||||
|     # Returns String hex digest |     # Returns String hex digest | ||||||
|     def self.hexdigest(obj) |     def self.hexdigest(obj) | ||||||
|       digest = Digest::MD5.new |       digest = Digest::MD5.new | ||||||
|       digest_strings(obj).each { |e| digest.update(e) } |  | ||||||
|       digest.hexdigest |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     # Internal: Get String representations for digest. |  | ||||||
|     # |  | ||||||
|     # obj - Object to digest |  | ||||||
|     # |  | ||||||
|     # Returns an Array of Strings. |  | ||||||
|     def self.digest_strings(obj) |  | ||||||
|       case obj |       case obj | ||||||
|       when String |       when String, Symbol, Integer | ||||||
|         ["#{obj.class}", "#{obj}"] |         digest.update "#{obj.class}" | ||||||
|       when Symbol |         digest.update "#{obj}" | ||||||
|         ["#{obj.class}", "#{obj}"] |  | ||||||
|       when Integer |  | ||||||
|         ["#{obj.class}", "#{obj}"] |  | ||||||
|       when TrueClass, FalseClass, NilClass |       when TrueClass, FalseClass, NilClass | ||||||
|         ["#{obj.class}"] |         digest.update "#{obj.class}" | ||||||
|       when Array |       when Array | ||||||
|         r = ["#{obj.class}"] |         digest.update "#{obj.class}" | ||||||
|         obj.each do |e| |         for e in obj | ||||||
|           r.concat(digest_strings(e)) |           digest.update(hexdigest(e)) | ||||||
|         end |         end | ||||||
|         r |  | ||||||
|       when Hash |       when Hash | ||||||
|         r = ["#{obj.class}"] |         digest.update "#{obj.class}" | ||||||
|         obj.map { |k, v| digest_strings([k, v]) }.sort.each do |e| |         for e in obj.map { |(k, v)| hexdigest([k, v]) }.sort | ||||||
|           r.concat(digest_strings(e)) |           digest.update(e) | ||||||
|         end |         end | ||||||
|         r |  | ||||||
|       else |       else | ||||||
|         raise TypeError, "can't convert #{obj.inspect} into String" |         raise TypeError, "can't convert #{obj.inspect} into String" | ||||||
|       end |       end | ||||||
|  |  | ||||||
|  |       digest.hexdigest | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -20099,5 +20099,5 @@ | |||||||
|     "XSLT": 1, |     "XSLT": 1, | ||||||
|     "YAML": 1 |     "YAML": 1 | ||||||
|   }, |   }, | ||||||
|   "md5": "a0ebeafa2f804284407990bfedb1c7ee" |   "md5": "5e73a20c894bdef413ab8409f9ba6406" | ||||||
| } | } | ||||||
| @@ -40,16 +40,16 @@ class TestMD5 < Test::Unit::TestCase | |||||||
|  |  | ||||||
|   def test_hexdigest_array |   def test_hexdigest_array | ||||||
|     assert_equal "4410ec34d9e6c1a68100ca0ce033fb17", MD5.hexdigest([]) |     assert_equal "4410ec34d9e6c1a68100ca0ce033fb17", MD5.hexdigest([]) | ||||||
|     assert_equal "a57e31bc7bce57d04dd6a07e74fd0d88", MD5.hexdigest([1]) |     assert_equal "759f28c1d0c20c22e79c91d339855d95", MD5.hexdigest([1]) | ||||||
|     assert_equal "ecbda6354c6e0370df33d43ce14701f4", MD5.hexdigest([1, 2]) |     assert_equal "9efe07b352dd94cd1cdc9d1a8d054f8f", MD5.hexdigest([1, 2]) | ||||||
|     assert_equal "5c42a2601d344f359017e2b76390e2cc", MD5.hexdigest([1, 2, 3]) |     assert_equal "60b1ef7201404f20c3d12f47499c3a1f", MD5.hexdigest([1, 2, 3]) | ||||||
|     assert_equal "c1816755a379d2b32289647ad1870d12", MD5.hexdigest([1, 2, [3]]) |     assert_equal "2f82cdc166616208077ff1dd0a8faeff", MD5.hexdigest([1, 2, [3]]) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_hexdigest_hash |   def test_hexdigest_hash | ||||||
|     assert_equal "fae8a9257e154175da4193dbf6552ef6", MD5.hexdigest({}) |     assert_equal "fae8a9257e154175da4193dbf6552ef6", MD5.hexdigest({}) | ||||||
|     assert_equal "b3646d6d84a803baa5ee2e5354057a65", MD5.hexdigest({:a => 1}) |     assert_equal "868ee214faf277829a85667cf332749f", MD5.hexdigest({:a => 1}) | ||||||
|     assert_equal "92c08085470d42ca0d33dd3ec5a8e098", MD5.hexdigest({:b => 2}) |     assert_equal "fa9df957c2b26de6fcca9d062ea8701e", MD5.hexdigest({:b => 2}) | ||||||
|  |  | ||||||
|     assert_not_equal MD5.hexdigest([:b, 2]), MD5.hexdigest({:b => 2}) |     assert_not_equal MD5.hexdigest([:b, 2]), MD5.hexdigest({:b => 2}) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user