There are some politically correct suggestions that we use ISO 639.1 language codes, but the reality is that to most people they mean very little. They are an engineering solution, not a UX solution.
If you go with country flags, there are some people that will not like the fact that you showed a US flag for English rather than for Navajo. The same way that some people living in France will think that you should use a French flag for Occitan.
The question that you need to answer is whether these complaints are significant to your user base, and whether or not it is clear what you mean. For example it annoys me when someone uses a US flag for English - to me it should be a British flag - but I know what they mean regardless.
You can go for the full name, but if you do that, please don't show the names in English. Show the names in the language that they represent. So instead of: French or Spanish show Français and Español.
It is still going to take longer for to find a language from text than they might from text and a flag, but you will have fewer people getting offended. You need to weigh up the two and decide what matters more for you.
As a side note. If you are going to avoid anything that will offend anyone, you are going to refrain from ever having an opinion on anything. Some people will find this post offensive because I am about to say beer. You can't make everyone happy, so don't try. Just try to make the clearest and most usable product that you can and avoid insulting people for no good reason.