This file is indexed.

/usr/lib/nodejs/carto/bin/mml2json.js is in node-carto 0.9.5-2.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/nodejs

var xml2js = require('xml2js'),
    fs = require('fs');

if (!process.argv[2]) {
    console.log('Please specify a XML file.');
    process.exit(1);
}

fs.readFile(process.argv[2], 'utf-8', function(err, data) {
    if (err) throw err;

    // Replace entities.
    var entities = {};
    var match = data.match(/<!ENTITY([^>]|"([^"]|\\")*")+>/g)
    if (match != null) {
        match.forEach(function(entity) {
          var parts = entity.match(/^<!ENTITY\s+(\w+)\s+"(.+)">$/);
          entities['&' + parts[1] + ';'] = parts[2];
        });
    }
    data = data.replace(/&\w+;/g, function(entity) {
        return entities[entity];
    });

    function addAttributes(obj) {
        if (obj['$']) for (var key in obj['$']) obj[key] = obj['$'][key];
        delete obj['$'];
        return obj;
    }

    function simplifyExternal(obj) {
        if (obj.src) return obj.src;
        else return obj;
    }

    var parser = new xml2js.Parser({
        explicitRoot: false,
        explicitArray: false
    });
    parser.addListener('end', function(json) {
        console.log(JSON.stringify(json, function(key, value) {
            if (!key) {
                return addAttributes(value);
            }
            else if (key === 'Stylesheet') {
                if (Array.isArray(value)) return value.map(addAttributes).map(simplifyExternal);
                else return [ simplifyExternal(addAttributes(value)) ];
            }
            else if (key === 'Layer' || key === 'Stylesheet') {
                if (Array.isArray(value)) return value.map(addAttributes);
                else return [ addAttributes(value) ];
            }
            else if (key === 'Datasource') {
                value = addAttributes(value);
                value.Parameter.forEach(function(parameter) {
                    value[parameter['$'].name] = parameter['_'];
                });
                delete value.Parameter;
                return value;
            }
            else {
                return value;
            }
        }, 4));
    });
    parser.parseString(data);
});