kopia lustrzana https://github.com/backface/turtlestitch
				
				
				
			prevent costumes with imported CORS-tainted canvases
expected to fix #155, #154, #151, #148, #147, #127 for future projectspull/3/merge
							rodzic
							
								
									c0a0c1f4a7
								
							
						
					
					
						commit
						e9afcc9ec3
					
				
							
								
								
									
										15
									
								
								gui.js
								
								
								
								
							
							
						
						
									
										15
									
								
								gui.js
								
								
								
								
							|  | @ -68,7 +68,7 @@ sb, CommentMorph, CommandBlockMorph*/ | |||
| 
 | ||||
| // Global stuff ////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| modules.gui = '2013-September-17'; | ||||
| modules.gui = '2013-September-18'; | ||||
| 
 | ||||
| // Declarations
 | ||||
| 
 | ||||
|  | @ -1488,6 +1488,19 @@ IDE_Morph.prototype.droppedImage = function (aCanvas, name) { | |||
|         aCanvas, | ||||
|         name ? name.split('.')[0] : '' // up to period
 | ||||
|     ); | ||||
| 
 | ||||
|     if (costume.isTainted()) { | ||||
|         this.inform( | ||||
|             'Unable to import this image', | ||||
|             'The picture you wish to import has been\n' + | ||||
|                 'tainted by a restrictive cross-origin policy\n' + | ||||
|                 'making it unusable for costumes in Snap!. \n\n' + | ||||
|                 'Try downloading this picture first to your\n' + | ||||
|                 'computer, and import it from there.' | ||||
|         ); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     this.currentSprite.addCostume(costume); | ||||
|     this.currentSprite.wearCostume(costume); | ||||
|     this.spriteBar.tabBar.tabTo('costumes'); | ||||
|  |  | |||
|  | @ -1912,3 +1912,7 @@ ______ | |||
| * GUI: fixed #119, #149 (accessing a shared projects requires lowercasing the username) | ||||
| * Portuguese translation update for SPLIT block, thanks, Manuel! | ||||
| * Store, Objects: prevent costumes from being drawn while they are loading, fixes parts of #154 | ||||
| 
 | ||||
| 130918 | ||||
| ------ | ||||
| * Objects, GUI: prevent costumes with CORS-tainted canvases, expected to fix #155, #154, #151, #148, #147, #127 for future projects | ||||
|  |  | |||
							
								
								
									
										20
									
								
								objects.js
								
								
								
								
							
							
						
						
									
										20
									
								
								objects.js
								
								
								
								
							|  | @ -124,7 +124,7 @@ PrototypeHatBlockMorph*/ | |||
| 
 | ||||
| // Global stuff ////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| modules.objects = '2013-September-17'; | ||||
| modules.objects = '2013-September-18'; | ||||
| 
 | ||||
| var SpriteMorph; | ||||
| var StageMorph; | ||||
|  | @ -5246,6 +5246,24 @@ Costume.prototype.thumbnail = function (extentPoint) { | |||
|     return trg; | ||||
| }; | ||||
| 
 | ||||
| // Costume catching "tainted" canvases
 | ||||
| 
 | ||||
| Costume.prototype.isTainted = function () { | ||||
|     // find out whether the canvas has been tainted by cross-origin data
 | ||||
|     // assumes that if reading image data throws an error it is tainted
 | ||||
|     try { | ||||
|         this.contents.getContext('2d').getImageData( | ||||
|             0, | ||||
|             0, | ||||
|             this.contents.width, | ||||
|             this.contents.height | ||||
|         ); | ||||
|     } catch (err) { | ||||
|         return true; | ||||
|     } | ||||
|     return false; | ||||
| }; | ||||
| 
 | ||||
| // SVG_Costume /////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| /* | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 jmoenig
						jmoenig