Fix some failure cases on FetchLinkCardService (#5347)
* If OEmbed response doesn't have a required property `type`, ignore it. e.g. `NoMethodError: undefined method 'type' for ...` * If we failed to detect encoding, fallback to default behavior of Nokogiri. e.g. `KeyError: key not found: :encoding`
This commit is contained in:
		
							parent
							
								
									9d84b6e606
								
							
						
					
					
						commit
						35ec1c91e3
					
				
					 1 changed files with 3 additions and 1 deletions
				
			
		|  | @ -72,6 +72,8 @@ class FetchLinkCardService < BaseService | |||
|   def attempt_oembed | ||||
|     response = OEmbed::Providers.get(@url) | ||||
| 
 | ||||
|     return false unless response.respond_to?(:type) | ||||
| 
 | ||||
|     @card.type          = response.type | ||||
|     @card.title         = response.respond_to?(:title)         ? response.title         : '' | ||||
|     @card.author_name   = response.respond_to?(:author_name)   ? response.author_name   : '' | ||||
|  | @ -113,7 +115,7 @@ class FetchLinkCardService < BaseService | |||
|     detector.strip_tags = true | ||||
| 
 | ||||
|     guess = detector.detect(html, response.charset) | ||||
|     page  = Nokogiri::HTML(html, nil, guess&.fetch(:encoding)) | ||||
|     page  = Nokogiri::HTML(html, nil, guess&.fetch(:encoding, nil)) | ||||
| 
 | ||||
|     if meta_property(page, 'twitter:player') | ||||
|       @card.type   = :video | ||||
|  |  | |||
		Reference in a new issue