Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Filtros
Message
De
24/08/2004 16:37:18
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivie
 
 
À
24/08/2004 14:49:42
Information générale
Forum:
Visual FoxPro
Catégorie:
Gestionnaire de rapports & Rapports
Titre:
Divers
Thread ID:
00935870
Message ID:
00936110
Vues:
25
>>Me parece que para una verificación rápida, bastaría con type([expresión del usuario]) # "U".
>
>No. Eso solo mira que el resultado sea "válido". O sea que retorne algo diferente a "U".
>Retornar "L" por ejemplo y que sea .T. no dice mucho sobre lo que el usuario entró. Puede ser código malicioso que retorne .T.
>
>Por ello, el debe verificar que la expresión en si sea válida (o al menos tenga algun sentido en su caso particular).

Recuerdo haber hecho pruebas en el pasado remoto (FoxPro 2.x), y no me aceptó UDF. Es decir, que type() me devolvía "U", incluso si la UDF estaba accesible. Esto incluso era un problema, en el sentido de que sí quería aceptar ciertas expresiones que podían incluir UDF. Por otra parte, no encontré una manera fácil de resolver el problema de seguridad.

Fíjate este ejemplo:
r = 10
MyExpression = "my_pi() * r^2"
? type(MyExpression)
* ? vartype(&MyExpression)
? eval(MyExpression)

function my_pi()
  * wait window "Entrado a MY_PI"
  return pi()
endfunc
El type() te da "U"; sin embargo, eval() lo evalúa correctamente.

La situación es distinta con vartype() - pero pruebas adicionales (activando las líneas comentadas) revelan que para evaluar vartype(), realmente se ejecuta el UDF.

Con type(), no hay ese peligro; pero no se puede acepar ninguna UDF.

Se me ocurre que una posibilidad de habilitar ciertas UDF bien definidas podría ser reemplazarlas por algo que VFP sí reconozca, aunque dé resultados distintos (si se sabe que el resultado de una fórmula debe ser de tipo "N", por ejemplo), y luego aplicar type() con el resultado.
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform