Использование 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
есть очевидный недостаток вызова полной мощности компилятора: он очень ресурсоемкий и создает большую дыру в безопасности, если вы не тщательно очистите свой ввод.