Adobe-Runtime-Support icon indicating copy to clipboard operation
Adobe-Runtime-Support copied to clipboard

iOS : same url using a not trusted certificate, connect first to http and after https causes app crash

Open pol2095 opened this issue 9 months ago • 0 comments

Problem Description

on the same url using a not trusted certificate, connect first to http and after https causes iOS app crash.

  • all AIR SDK version
  • all iOS devices

Steps to Reproduce

package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLLoaderDataFormat;
	import flash.events.MouseEvent;

	public class Main extends Sprite
	{
		public function Main()
		{
			this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
		}

		private function addedToStageHandler(e:Event):void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			var sprite:Sprite = new Sprite()
			sprite.graphics.beginFill(0x0000FF);
			sprite.graphics.drawRect( 0, 50, 100, 100);
			sprite.graphics.endFill();
			sprite.addEventListener(MouseEvent.CLICK, mouseClickHttpHandler);
			this.addChild( sprite );
			
			var sprite2:Sprite = new Sprite()
			sprite2.graphics.beginFill(0x00FF00);
			sprite2.graphics.drawRect( 120, 50, 100, 100);
			sprite2.graphics.endFill();
			sprite2.addEventListener(MouseEvent.CLICK, mouseClickHttpsHandler);
			this.addChild( sprite2 );
		}
		
		private function mouseClickHttpHandler(event : MouseEvent) : void
		{
			var uri:String = "http://test.pol2095.ovh/";
			
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
			urlLoader.addEventListener(Event.COMPLETE, eSCLCompleteHandler);
			urlLoader.addEventListener(Event.OPEN, eSCLOpenHandler);
			urlLoader.addEventListener(ProgressEvent.PROGRESS, eSCLProgressHandler);
			urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, eSCLSecurityErrorHandler);
			//urlLoader.addEventListener("certificateError", eSCLCertificateErrorHandler);
			urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, eSCLHttpStatusHandler);
			urlLoader.addEventListener(IOErrorEvent.IO_ERROR, eSCLIoErrorHandler);
			urlLoader.load(new URLRequest(uri));
		}
		
		private function mouseClickHttpsHandler(event : MouseEvent) : void
		{
			var uri:String = "https://test.pol2095.ovh/";
			
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
			urlLoader.addEventListener(Event.COMPLETE, eSCLCompleteHandler);
			urlLoader.addEventListener(Event.OPEN, eSCLOpenHandler);
			urlLoader.addEventListener(ProgressEvent.PROGRESS, eSCLProgressHandler);
			urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, eSCLSecurityErrorHandler);
			//urlLoader.addEventListener("certificateError", eSCLCertificateErrorHandler);
			urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, eSCLHttpStatusHandler);
			urlLoader.addEventListener(IOErrorEvent.IO_ERROR, eSCLIoErrorHandler);
			urlLoader.load(new URLRequest(uri));
		}
		
		private function eSCLCompleteHandler(event:Event):void {
			trace( event.target.data );
		}
		
		private function eSCLOpenHandler(event:Event):void {
			trace( "open" );
		}
		
		private function eSCLProgressHandler(event:ProgressEvent):void {
			trace( Math.round(event.bytesLoaded / event.bytesTotal * 100) );
		}
		
		private function eSCLSecurityErrorHandler(event:SecurityErrorEvent):void {
			trace( event.errorID, event.text );
		}
		
		private function eSCLCertificateErrorHandler(event:SecurityErrorEvent):void {
			trace( "certificateError", event.errorID, event.text );
			event.preventDefault();
		}
		
		private function eSCLHttpStatusHandler(event:HTTPStatusEvent):void {
			trace( "status as3 : ", event.status );
		}
		
		private function eSCLIoErrorHandler(event:IOErrorEvent):void {
			trace( event.errorID, event.text );
		}
	}
}

I tried URLLoader and Loader, same problem

Known Workarounds

no workaround

pol2095 avatar May 15 '24 11:05 pol2095