From 0218d0aac5a89ac96819faa4494d84a9a7c17e9b Mon Sep 17 00:00:00 2001 From: Surma Date: Mon, 3 Aug 2020 19:36:11 +0100 Subject: [PATCH] Avoid leaks during encoding --- codecs/avif/enc/avif_enc.cpp | 7 ++++--- codecs/avif/enc/avif_enc.js | 22 +++++++++++----------- codecs/avif/enc/avif_enc.wasm | Bin 1658313 -> 1658323 bytes 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/codecs/avif/enc/avif_enc.cpp b/codecs/avif/enc/avif_enc.cpp index 0b096774..e295c5de 100644 --- a/codecs/avif/enc/avif_enc.cpp +++ b/codecs/avif/enc/avif_enc.cpp @@ -60,13 +60,14 @@ val encode(std::string buffer, int width, int height, AvifOptions options) { encoder->tileColsLog2 = options.tileColsLog2; encoder->speed = options.speed; avifResult encodeResult = avifEncoderWrite(encoder, image, &output); - if (encodeResult != AVIF_RESULT_OK) { - return val::null(); + auto js_result = val::null(); + if (encodeResult == AVIF_RESULT_OK) { + js_result = Uint8Array.new_(typed_memory_view(output.size, output.data)); } - auto js_result = Uint8Array.new_(typed_memory_view(output.size, output.data)); avifImageDestroy(image); avifEncoderDestroy(encoder); + avifRWDataFree(&output); return js_result; } diff --git a/codecs/avif/enc/avif_enc.js b/codecs/avif/enc/avif_enc.js index 1865f160..3125bf4a 100644 --- a/codecs/avif/enc/avif_enc.js +++ b/codecs/avif/enc/avif_enc.js @@ -62,26 +62,26 @@ Object.defineProperties(Bb.prototype,{read:{get:function(){return 365===(this.mo (function(){O("/dev");hb(259,{read:function(){return 0},write:function(d,f,g,h){return h}});Kb("/dev/null",259);gb(1280,jb);gb(1536,kb);Kb("/dev/tty",1280);Kb("/dev/tty1",1536);if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(ea)try{var c=require("crypto");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){x("random_device")});Sb("random",b);Sb("urandom",b);O("/dev/shm"); O("/dev/shm/tmp")})();O("/proc");O("/proc/self");O("/proc/self/fd");Ib({Ua:function(){var a=mb("/proc/self","fd",16895,73);a.Na={lookup:function(b,c){var d=sb[+c];if(!d)throw new L(8);b={parent:null,Ua:{pb:"fake"},Na:{readlink:function(){return d.path}}};return b.parent=b}};return a}},"/proc/self/fd");ec=e.InternalError=dc("InternalError");for(var Dc=Array(256),Ec=0;256>Ec;++Ec)Dc[Ec]=String.fromCharCode(Ec);ic=Dc;jc=e.BindingError=dc("BindingError"); e.count_emval_handles=function(){for(var a=0,b=5;bf?-28:Mb(d.path,d.flags,0,f).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return f=Vb(),d.flags|=f,0;case 12:return f=Vb(),D[f+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return F[Fc()>>2]=28,-1;default:return-28}}catch(g){return"undefined"!==typeof Q&&g instanceof L||x(g),-g.Wa}}, -L:function(a,b,c){Ub=c;try{var d=Wb(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty?0:-59;case 21519:if(!d.tty)return-59;var f=Vb();return F[f>>2]=0;case 21520:return d.tty?-28:-59;case 21531:a=f=Vb();if(!d.Oa.zb)throw new L(59);return d.Oa.zb(d,b,a);case 21523:return d.tty?0:-59;case 21524:return d.tty?0:-59;default:x("bad ioctl syscall "+b)}}catch(g){return"undefined"!==typeof Q&&g instanceof L||x(g),-g.Wa}},M:function(a, -b,c){Ub=c;try{var d=a?B(C,a,void 0):"",f=Vb();return Mb(d,b,f).fd}catch(g){return"undefined"!==typeof Q&&g instanceof L||x(g),-g.Wa}},z:function(a){var b=Xb[a];delete Xb[a];var c=b.Cb,d=b.Db,f=b.kb,g=f.map(function(h){return h.xb}).concat(f.map(function(h){return h.Hb}));fc([a],g,function(h){var k={};f.forEach(function(l,n){var p=h[n],t=l.vb,v=l.wb,w=h[n+f.length],q=l.Gb,E=l.Ib;k[l.tb]={read:function(y){return p.fromWireType(t(v,y))},write:function(y,P){var ra=[];q(E,y,w.toWireType(ra,P));Yb(ra)}}}); +var Sc={w:function(a){return pb(a)},U:function(){},S:function(a){"uncaught_exception"in $a?$a.Za++:$a.Za=1;throw a;},p:function(a,b,c){Ub=c;try{var d=Wb(a);switch(b){case 0:var f=Vb();return 0>f?-28:Mb(d.path,d.flags,0,f).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return f=Vb(),d.flags|=f,0;case 12:return f=Vb(),D[f+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return F[Fc()>>2]=28,-1;default:return-28}}catch(g){return"undefined"!==typeof Q&&g instanceof L||x(g),-g.Wa}}, +M:function(a,b,c){Ub=c;try{var d=Wb(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty?0:-59;case 21519:if(!d.tty)return-59;var f=Vb();return F[f>>2]=0;case 21520:return d.tty?-28:-59;case 21531:a=f=Vb();if(!d.Oa.zb)throw new L(59);return d.Oa.zb(d,b,a);case 21523:return d.tty?0:-59;case 21524:return d.tty?0:-59;default:x("bad ioctl syscall "+b)}}catch(g){return"undefined"!==typeof Q&&g instanceof L||x(g),-g.Wa}},N:function(a, +b,c){Ub=c;try{var d=a?B(C,a,void 0):"",f=Vb();return Mb(d,b,f).fd}catch(g){return"undefined"!==typeof Q&&g instanceof L||x(g),-g.Wa}},A:function(a){var b=Xb[a];delete Xb[a];var c=b.Cb,d=b.Db,f=b.kb,g=f.map(function(h){return h.xb}).concat(f.map(function(h){return h.Hb}));fc([a],g,function(h){var k={};f.forEach(function(l,n){var p=h[n],t=l.vb,v=l.wb,w=h[n+f.length],q=l.Gb,E=l.Ib;k[l.tb]={read:function(y){return p.fromWireType(t(v,y))},write:function(y,P){var ra=[];q(E,y,w.toWireType(ra,P));Yb(ra)}}}); return[{name:b.name,fromWireType:function(l){var n={},p;for(p in k)n[p]=k[p].read(l);d(l);return n},toWireType:function(l,n){for(var p in k)if(!(p in n))throw new TypeError('Missing field: "'+p+'"');var t=c();for(p in k)k[p].write(t,n[p]);null!==l&&l.push(d,t);return t},argPackAdvance:8,readValueFromPointer:Zb,Ta:d}]})},P:function(a,b,c,d,f){var g=hc(c);b=T(b);S(a,{name:b,fromWireType:function(h){return!!h},toWireType:function(h,k){return k?d:f},argPackAdvance:8,readValueFromPointer:function(h){if(1=== -c)var k=H;else if(2===c)k=D;else if(4===c)k=F;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>g])},Ta:null})},O:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(c){var d=V[c].value;lc(c);return d},toWireType:function(c,d){return mc(d)},argPackAdvance:8,readValueFromPointer:Zb,Ta:null})},s:function(a,b,c){c=hc(c);b=T(b);S(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+ -nc(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:oc(b,c),Ta:null})},x:function(a,b,c,d,f,g){var h=sc(b,c);a=T(a);f=tc(d,f);rc(a,function(){xc("Cannot call "+a+" due to unbound types",h)},b-1);fc([],h,function(k){var l=[k[0],null].concat(k.slice(1)),n=k=a,p=f,t=l.length;2>t&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var v=null!==l[1]&&!1,w=!1,q=1;q>g])},Ta:null})},O:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(c){var d=V[c].value;lc(c);return d},toWireType:function(c,d){return mc(d)},argPackAdvance:8,readValueFromPointer:Zb,Ta:null})},t:function(a,b,c){c=hc(c);b=T(b);S(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+ +nc(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:oc(b,c),Ta:null})},y:function(a,b,c,d,f,g){var h=sc(b,c);a=T(a);f=tc(d,f);rc(a,function(){xc("Cannot call "+a+" due to unbound types",h)},b-1);fc([],h,function(k){var l=[k[0],null].concat(k.slice(1)),n=k=a,p=f,t=l.length;2>t&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var v=null!==l[1]&&!1,w=!1,q=1;q>>k}}var l=-1!=b.indexOf("unsigned");S(a,{name:b,fromWireType:g,toWireType:function(n,p){if("number"!==typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+ nc(p)+'" to '+this.name);if(pf)throw new TypeError('Passing a number "'+nc(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return l?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:yc(b,h,0!==d),Ta:null})},f:function(a,b,c){function d(g){g>>=2;var h=I;return new f(G,h[g+1],h[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);S(a,{name:c,fromWireType:d,argPackAdvance:8, -readValueFromPointer:d},{yb:!0})},t:function(a,b){b=T(b);var c="std::string"===b;S(a,{name:b,fromWireType:function(d){var f=I[d>>2];if(c)for(var g=d+4,h=0;h<=f;++h){var k=d+4+h;if(h==f||0==C[k]){g=g?B(C,g,k-g):"";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=k+1}}else{l=Array(f);for(h=0;h>2];if(c)for(var g=d+4,h=0;h<=f;++h){var k=d+4+h;if(h==f||0==C[k]){g=g?B(C,g,k-g):"";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=k+1}}else{l=Array(f);for(h=0;h>2]=h;if(c&&g)sa(f,C,k+4,h+1);else if(g)for(g=0;g>2],p=h(),t,v=l+4,w=0;w<=n;++w){var q=l+4+w*b;if(w==n||0==p[q>>k])v=d(v,q-v),void 0===t?t=v:(t+=String.fromCharCode(0),t+=v),v=q+b}W(l);return t},toWireType:function(l,n){"string"!==typeof n&&U("Cannot pass non-string to C++ string type "+c);var p=g(n),t=pb(4+p+b);I[t>>2]=p>>k;f(n,t+4,p+b);null!==l&&l.push(W,t);return t},argPackAdvance:8, -readValueFromPointer:Zb,Ta:function(l){W(l)}})},G:function(a,b,c,d,f,g){Xb[a]={name:T(b),Cb:tc(c,d),Db:tc(f,g),kb:[]}},y:function(a,b,c,d,f,g,h,k,l,n){Xb[a].kb.push({tb:T(b),xb:c,vb:tc(d,f),wb:g,Hb:h,Gb:tc(k,l),Ib:n})},Q:function(a,b){b=T(b);S(a,{Nb:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},N:lc,T:function(a){if(0===a)return mc(Ac());var b=zc[a];a=void 0===b?T(a):b;return mc(Ac()[a])},w:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Bc, -e,mc);Cc[b]=f}return f(a,c,d)},u:function(){x()},d:function(a,b){X(a,b||1);throw"longjmp";},J:function(a,b,c){C.copyWithin(a,b,b+c)},j:function(a){a>>>=0;var b=C.length;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>>16);Ea(A.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},r:function(a){try{var b=Wb(a);if(null===b.fd)throw new L(8); -b.cb&&(b.cb=null);try{b.Oa.close&&b.Oa.close(b)}catch(c){throw c;}finally{sb[b.fd]=null}b.fd=null;return 0}catch(c){return"undefined"!==typeof Q&&c instanceof L||x(c),c.Wa}},K:function(a,b,c,d){try{a:{for(var f=Wb(a),g=a=0;g>2],k=f,l=F[b+8*g>>2],n=h,p=void 0,t=H;if(0>n||0>p)throw new L(28);if(null===k.fd)throw new L(8);if(1===(k.flags&2097155))throw new L(8);if(16384===(k.node.mode&61440))throw new L(31);if(!k.Oa.read)throw new L(28);var v="undefined"!==typeof p;if(!v)p= -k.position;else if(!k.seekable)throw new L(70);var w=k.Oa.read(k,t,l,n,p);v||(k.position+=w);var q=w;if(0>q){var E=-1;break a}a+=q;if(q>2]=E;return 0}catch(y){return"undefined"!==typeof Q&&y instanceof L||x(y),y.Wa}},D:function(a,b,c,d,f){try{var g=Wb(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;Ob(g,a,d);Ya=[g.position>>>0,(Xa=g.position,1<=+Ma(Xa)?0>>0:~~+Na((Xa-+(~~Xa>>>0))/4294967296)>>>0:0)];F[f>>2]= +e,mc);Cc[b]=f}return f(a,c,d)},v:function(){x()},d:function(a,b){X(a,b||1);throw"longjmp";},K:function(a,b,c){C.copyWithin(a,b,b+c)},j:function(a){a>>>=0;var b=C.length;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>>16);Ea(A.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},r:function(a){try{var b=Wb(a);if(null===b.fd)throw new L(8); +b.cb&&(b.cb=null);try{b.Oa.close&&b.Oa.close(b)}catch(c){throw c;}finally{sb[b.fd]=null}b.fd=null;return 0}catch(c){return"undefined"!==typeof Q&&c instanceof L||x(c),c.Wa}},L:function(a,b,c,d){try{a:{for(var f=Wb(a),g=a=0;g>2],k=f,l=F[b+8*g>>2],n=h,p=void 0,t=H;if(0>n||0>p)throw new L(28);if(null===k.fd)throw new L(8);if(1===(k.flags&2097155))throw new L(8);if(16384===(k.node.mode&61440))throw new L(31);if(!k.Oa.read)throw new L(28);var v="undefined"!==typeof p;if(!v)p= +k.position;else if(!k.seekable)throw new L(70);var w=k.Oa.read(k,t,l,n,p);v||(k.position+=w);var q=w;if(0>q){var E=-1;break a}a+=q;if(q>2]=E;return 0}catch(y){return"undefined"!==typeof Q&&y instanceof L||x(y),y.Wa}},E:function(a,b,c,d,f){try{var g=Wb(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;Ob(g,a,d);Ya=[g.position>>>0,(Xa=g.position,1<=+Ma(Xa)?0>>0:~~+Na((Xa-+(~~Xa>>>0))/4294967296)>>>0:0)];F[f>>2]= Ya[0];F[f+4>>2]=Ya[1];g.cb&&0===a&&0===d&&(g.cb=null);return 0}catch(h){return"undefined"!==typeof Q&&h instanceof L||x(h),h.Wa}},q:function(a,b,c,d){try{a:{for(var f=Wb(a),g=a=0;g>2],l=F[b+(8*g+4)>>2],n=void 0,p=H;if(0>l||0>n)throw new L(28);if(null===h.fd)throw new L(8);if(0===(h.flags&2097155))throw new L(8);if(16384===(h.node.mode&61440))throw new L(31);if(!h.Oa.write)throw new L(28);h.seekable&&h.flags&1024&&Ob(h,0,2);var t="undefined"!==typeof n;if(!t)n=h.position; -else if(!h.seekable)throw new L(70);var v=h.Oa.write(h,p,k,l,n,void 0);t||(h.position+=v);try{if(h.path&&wb.onWriteToFile)wb.onWriteToFile(h.path)}catch(E){z("FS.trackingDelegate['onWriteToFile']('"+h.path+"') threw an exception: "+E.message)}var w=v;if(0>w){var q=-1;break a}a+=w}q=a}F[d>>2]=q;return 0}catch(E){return"undefined"!==typeof Q&&E instanceof L||x(E),E.Wa}},a:function(){return ma|0},m:Gc,e:Hc,F:Ic,o:Jc,E:Kc,B:Lc,A:Mc,C:Nc,H:Oc,k:Pc,l:Qc,c:Rc,memory:A,g:function(a){a=+a;return 0<=a?+Oa(a+ +else if(!h.seekable)throw new L(70);var v=h.Oa.write(h,p,k,l,n,void 0);t||(h.position+=v);try{if(h.path&&wb.onWriteToFile)wb.onWriteToFile(h.path)}catch(E){z("FS.trackingDelegate['onWriteToFile']('"+h.path+"') threw an exception: "+E.message)}var w=v;if(0>w){var q=-1;break a}a+=w}q=a}F[d>>2]=q;return 0}catch(E){return"undefined"!==typeof Q&&E instanceof L||x(E),E.Wa}},a:function(){return ma|0},m:Gc,e:Hc,G:Ic,o:Jc,F:Kc,C:Lc,B:Mc,D:Nc,I:Oc,k:Pc,l:Qc,c:Rc,memory:A,g:function(a){a=+a;return 0<=a?+Oa(a+ .5):+Na(a-.5)},h:function(a){a=+a;return 0<=a?+Oa(a+.5):+Na(a-.5)},b:function(a){ma=a|0},table:oa,R:function(a){var b=Date.now()/1E3|0;a&&(F[a>>2]=b);return b}}; (function(){function a(f){e.asm=f.exports;J--;e.monitorRunDependencies&&e.monitorRunDependencies(J);0==J&&(null!==Qa&&(clearInterval(Qa),Qa=null),Ra&&(f=Ra,Ra=null,f()))}function b(f){a(f.instance)}function c(f){return Wa().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){z("failed to asynchronously prepare wasm: "+g);x(g)})}var d={a:Sc};J++;e.monitorRunDependencies&&e.monitorRunDependencies(J);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return z("Module.instantiateWasm callback failed with error: "+ f),!1}(function(){if(na||"function"!==typeof WebAssembly.instantiateStreaming||Ta()||Sa("file://")||"function"!==typeof fetch)return c(b);fetch(K,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){z("wasm streaming compile failed: "+g);z("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); diff --git a/codecs/avif/enc/avif_enc.wasm b/codecs/avif/enc/avif_enc.wasm index 8d62898be577c215a60971b0f2c1e396e5a237c3..b762ffeec75062015a49945db694c1ef281fdcfb 100644 GIT binary patch delta 5567 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 W`1tS%!6y`-Fnq%Ks`U}AHvA8WZUJrp