Использование eval в couchdb уменьшает - насколько это опасно?

Мои документы содержат списки ошибок. У меня есть представление, которое подсчитывает количество документов с определенной ошибкой и среднее число ошибок, которые документ имеет с данной ошибкой.

карта

function (doc) {
var i;
for (i = 0; i < doc.errors.length; i = i + 1){
    emit([doc.errors[i], doc.flummery], [1, doc.errors.length])
}

}

уменьшить

function (key, values, rereduce) {
var avg = [];
var cnt = [];
var i;
for (i = 0; i < values.length; i = i + 1) {
    avg.push(values[i][1]);
    cnt.push(values[i][0]);
}
return [sum(cnt), eval(avg.join("+")) / avg.length]

}

Я много раз читал, что использование eval() - это путь к безумию, но я не могу придумать, каким образом это могло бы меня запутать. Eval () безопасен в представлениях couchdb?

Обратите внимание, что Олег придумал очевидный ответ: "Не делай этого, couchdb дает тебе функцию sum()". В этой ситуации очевидно, что eval() не нужен. Тем не менее, должен ли я когда-либо требовать этого, безопасно ли его использовать, если я буду хорошо контролировать свои входные данные?

1 ответ

Решение

Вы не можете использовать sum(avg) / avg.length вместо?

eval есть очевидный недостаток вызова полной мощности компилятора: он очень ресурсоемкий и создает большую дыру в безопасности, если вы не тщательно очистите свой ввод.

Другие вопросы по тегам