Oracle DBAI Theory : is it REALLY not possible to have Oracle Database Corrupted after Instance Crash?
A dirty block can only be written to disk if all changes until the modification time of this block was already written to the redo logs. The Oracle 12g2 Database Concepts Guide says


  Before DBW can write a dirty buffer, the database must write to disk the redo
  records associated with changes to the buffer (the write-ahead protocol). If DBW
  discovers that some redo records have not been written, it signals LGWR to write
  the records to disk, and waits for LGWR to complete before writing the data
  buffers to disk.


So after a database was recovered it contains all modification until to a certain time and no modifications that where made after this time. If a transaction was committed the redo logs contain the modification oft his transaction and so its modifications where written to the data files during the recovery. Transactions that weren't committed either only modified memory structures (buffer cache) and so all there modifications are lost because of he crash, or they did some modifications of the file but then the undo information was also written to the files that contains the undo segments and this undo information will be used to undo the changes of this transaction.

case 3:  If a dirty block of a data file is written back to disk then all changes done before the modification of this block is already in the redo logs and so the undo information is already in the redo logs

case 1: If no user issues a commit that does not mean that changes are written to data file or redo log. But if something was written to disk it can be undone as described above.

case 2: Uncommitted changes must not be written to disk. It is only guaranteed that committed changes are written to disk.