An escaped convict, Frank (Josh Brolin), forces an agoraphobic woman, Adele (Kate Winslet), and her son, Henry, to hide him in their house. They are initially afraid of him but he ends up being innocuous and helps them fix up their home, as well as becoming a surrogate father for the 12-year-old boy.
It turns out Frank was in prison for killing his wife and infant baby, although both crimes were actually accidents that happened simultaneously. He has jumped out a window while having appendicitis treated in prison.
Adele begins to fall in love with Frank and reveals the reason she never leaves the house is she had four miscarriages and became ashamed, leading to depression and a divorce. Frank and Adele decide to make a run for the Canadian border so he won’t be taken away; but on the day of the trip, several people pick up on Frank’s whereabouts and the police come to the house to arrest him.
Frank is given 25 years in jail, mostly for kidnapping; when Adele tries to explain to a prosecutor that they weren’t truly kidnapped, he points out she’ll probably lose custody of her son if she admits to harboring a fugitive and putting her child in harm’s way.
Frank serves about 20 years in prison and when he is finally released, he reunites with Adele and their relationship picks up where it left off.