@@ -128,16 +128,21 @@ function interpretMetadata(metadata) {
128128}
129129
130130function canvasReadBinaryAlpha ( canvas , ctx , length ) {
131- let data = '' ;
132- for ( let x = 0 ; x < canvas . width ; x ++ ) {
133- for ( let y = 0 ; y < canvas . height ; y ++ ) {
134- let pixel = ctx . getImageData ( x , y , 1 , 1 ) . data ;
135- data += ( pixel [ 3 ] & 0x01 ) == 0 ? '0' : '1' ;
136- if ( data . length >= length * 8 ) {
137- return data ;
131+ try {
132+ let data = '' ;
133+ for ( let x = 0 ; x < canvas . width ; x ++ ) {
134+ for ( let y = 0 ; y < canvas . height ; y ++ ) {
135+ let pixel = ctx . getImageData ( x , y , 1 , 1 ) . data ;
136+ data += ( pixel [ 3 ] & 0x01 ) == 0 ? '0' : '1' ;
137+ if ( data . length >= length * 8 ) {
138+ return data ;
139+ }
138140 }
139141 }
140142 }
143+ catch ( e ) {
144+ console . error ( `Error reading binary alpha: ${ e } ` ) ;
145+ }
141146 return null ;
142147}
143148
@@ -161,33 +166,42 @@ function parseMetadata(data, callback) {
161166 let img = new Image ( ) ;
162167 img . src = data ;
163168 img . onload = ( ) => {
164- let canvas = document . createElement ( 'canvas' ) ;
165- canvas . width = img . width ;
166- canvas . height = img . height ;
167- let ctx = canvas . getContext ( '2d' ) ;
168- ctx . drawImage ( img , 0 , 0 ) ;
169- let alphaData = canvasReadBinaryAlpha ( canvas , ctx , "stealth_pnginfo" . length + 4 ) ;
170- let headerBytes = binaryStringToBytes ( alphaData ) ;
171- let headerType = new TextDecoder ( ) . decode ( new Uint8Array ( headerBytes . slice ( 0 , "stealth_pnginfo" . length ) ) ) ;
172- if ( headerType == "stealth_pnginfo" || headerType == "stealth_pngcomp" ) {
173- let dataLengthBytes = headerBytes . slice ( "stealth_pnginfo" . length ) ;
174- let dataLength = bytesToInt32 ( dataLengthBytes ) / 8 ;
175- let alphaContent = canvasReadBinaryAlpha ( canvas , ctx , dataLength + "stealth_pnginfo" . length + 4 ) ;
176- let metadataBytes = new Uint8Array ( binaryStringToBytes ( alphaContent ) . slice ( "stealth_pnginfo" . length + 4 ) ) ;
177- if ( headerType == "stealth_pngcomp" ) {
178- ungzip ( metadataBytes ) . then ( decompressed => {
179- let metadata = new TextDecoder ( ) . decode ( decompressed ) ;
169+ try {
170+ let canvas = document . createElement ( 'canvas' ) ;
171+ canvas . width = img . width ;
172+ canvas . height = img . height ;
173+ let ctx = canvas . getContext ( '2d' ) ;
174+ ctx . drawImage ( img , 0 , 0 ) ;
175+ let alphaData = canvasReadBinaryAlpha ( canvas , ctx , "stealth_pnginfo" . length + 4 ) ;
176+ let headerBytes = binaryStringToBytes ( alphaData ) ;
177+ let headerType = new TextDecoder ( ) . decode ( new Uint8Array ( headerBytes . slice ( 0 , "stealth_pnginfo" . length ) ) ) ;
178+ if ( headerType == "stealth_pnginfo" || headerType == "stealth_pngcomp" ) {
179+ let dataLengthBytes = headerBytes . slice ( "stealth_pnginfo" . length ) ;
180+ let dataLength = bytesToInt32 ( dataLengthBytes ) / 8 ;
181+ let alphaContent = canvasReadBinaryAlpha ( canvas , ctx , dataLength + "stealth_pnginfo" . length + 4 ) ;
182+ let metadataBytes = new Uint8Array ( binaryStringToBytes ( alphaContent ) . slice ( "stealth_pnginfo" . length + 4 ) ) ;
183+ if ( headerType == "stealth_pngcomp" ) {
184+ ungzip ( metadataBytes ) . then ( decompressed => {
185+ let metadata = new TextDecoder ( ) . decode ( decompressed ) ;
186+ metadata = interpretMetadata ( metadata ) ;
187+ callback ( data , metadata ) ;
188+ } ) . catch ( err => {
189+ console . error ( `Error unzipping metadata (stealth): ${ err } ` ) ;
190+ callback ( data , null ) ;
191+ } ) ;
192+ }
193+ else {
194+ let metadata = new TextDecoder ( ) . decode ( metadataBytes ) ;
180195 metadata = interpretMetadata ( metadata ) ;
181196 callback ( data , metadata ) ;
182- } ) ;
197+ }
183198 }
184199 else {
185- let metadata = new TextDecoder ( ) . decode ( metadataBytes ) ;
186- metadata = interpretMetadata ( metadata ) ;
187- callback ( data , metadata ) ;
200+ callback ( data , null ) ;
188201 }
189202 }
190- else {
203+ catch ( e ) {
204+ console . error ( `Error parsing metadata (stealth): ${ e } ` ) ;
191205 callback ( data , null ) ;
192206 }
193207 } ;
@@ -210,6 +224,7 @@ function parseMetadata(data, callback) {
210224 metadata = interpretMetadata ( metadata ) ;
211225 callback ( data , metadata ) ;
212226 } ) . catch ( err => {
227+ console . error ( `Error parsing metadata (exif): ${ err } ` ) ;
213228 backupPlan ( ) ;
214229 } ) ;
215230}
0 commit comments