Cita: ¿como puedo hacer para no ejecute la funcion si el usuario presiona "cancelar"?
me estuvo muy extraño lo que citas y evidentemente asi lo hace chrome, en Fx3 e iexplorer7 no sucede eso. recuerda que el evento onchange se dispara cuando hay un cambio de valor por lo cual es perfectamente normal si se ejecuta aun presionando sobre Cancel. no se cual es el proposito pero una forma de solucionarlo es verificando el valor antes de proceder a operar con él.
Código:
<input type="file" onchange="if(!this.value.length)return false; mifuncion();" />
// se verifica la longitud de caracteres, si equivale a cero (0) significa una de dos:
// no se ha seleccionado un archivo, o se ha eliminado el valor.