diff --git a/lib/x11/corereqs.js b/lib/x11/corereqs.js index af2c8cd..a7b0ffc 100644 --- a/lib/x11/corereqs.js +++ b/lib/x11/corereqs.js @@ -229,7 +229,6 @@ module.exports = { format += 'S'; args.push(points[i]); } - console.error([format, args]); return [format, args]; } ], @@ -245,7 +244,6 @@ module.exports = { format += 'S'; args.push(points[i]); } - console.error([format, args]); return [format, args]; } @@ -285,6 +283,24 @@ module.exports = { } ], + QueryExtension: [ + function(name) { + var padded = xutil.padded_string(name); + return ['CxSSxxa', [98, 2+padded.length/4, name.length, padded] ]; + }, + + function(buf) { + var res = buf.unpack('CCCC'); + var ext = {}; + ext.present = res[0]; + ext.majorOpcode = res[1]; + ext.firstEvent = res[2]; + ext.firstError = res[3]; + return ext; + } + + ], + ListExtensions: [ [ 'CxS', [99, 1] ], @@ -297,6 +313,12 @@ module.exports = { var len = buf[off++]; if (len == 0) break; + if (off + len > buf.length) + { + len = buf.length - off; + if (len <= 0) + break; + } res.push(buf.unpackString(len, off)); off += len; } diff --git a/test/query_ext.js b/test/query_ext.js new file mode 100644 index 0000000..52a539a --- /dev/null +++ b/test/query_ext.js @@ -0,0 +1,17 @@ +var x11 = require('../lib/x11'); +var X = x11.createClient(); +var numExt = 0; +X.on('connect', function(display) { + X.ListExtensions(function(list) { + console.log(list); + list.forEach(function(ext) { + numExt++; + X.QueryExtension(ext, function(e) { + e.name = ext; + console.log(e); + if (--numExt == 0) + X.terminate(); + }); + }); + }); +});