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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue