Correction: a block can currently contain 1MB of data. Originally, there was no limit, but at some point the 1MB limit was added to prevent DOS attacks. It was never intended to be permanent and can be increased or removed entirely if necessary (I think Gavin said the limit would be raised once pruning is implemented).
Shouldn't the tx fee prevent DDOS attacks of this type?
Tx fee prevents another type of attack (namely spamming the memory pool) or at least raises the cost. However there is no required tx fee so if there was no maximum block someone with sufficient mining power for example could make a 1TB block (all free txs made by the miner) and now the blockchain is >1TB.