Arthur Kirkland (Al Pacino), un abogado defensor en Baltimore, está en la cárcel por desacato a un cargo judicial después de golpear al juez Henry T. Fleming (John Forsythe) mientras discutía el caso de Jeff McCullaugh (Thomas G. Waites).
McCullaugh fue detenido por un delito menor de tráfico, pero luego fue confundido con un asesino del mismo nombre y ya pasó un año y medio en la cárcel; Fleming ha obstaculizado repetidamente los esfuerzos de Arthur para que se revise el caso.
Aunque hay nuevas pruebas sólidas de que Jeff es inocente, Fleming rechaza su apelación debido a su presentación tardía y lo deja en prisión.
Arthur inicia un nuevo caso, defendiendo al transformista Ralph Agee (Robert Christian), arrestado por un pequeño delito y convertido en otra víctima del sistema legal.
Arthur hace visitas regulares a su abuelo Sam (Lee Strasberg) en un hogar de ancianos, quien progresivamente se está volviendo senil.
Arthur también comienza un romance con la abogada Gail Packer (Christine Lahti), miembro del Comité de Ética Legal.
Arthur tiene una relación de amistad con el juez Francis Rayford (Jack Warden), quien lo lleva a un viaje espeluznante en su helicóptero personal, riendo al probar hasta dónde pueden llegar antes de quedarse sin combustible, mientras un Arthur aterrorizado le ruega que aterrice.
Luego revela que, treinta minutos después de ser sentenciado, Ralph se suicidó ahorcándose.
Mientras tanto, Jeff, abusado sexual y físicamente por otros reclusos, captura a dos rehenes en la prisión.
Arthur se encuentra con otro cliente, Carl (Dominic Chianese), quien le da fotografías que muestran a Fleming involucrado en actos de BDSM con una prostituta.
Al final, Arthur se sienta en los escalones del tribunal, sabiendo que su estallido probablemente le costará su carrera.
Jay, aparentemente recuperado, pasa y se saca su peluca saludando a Arthur, dejándolo incrédulo sobre los escalones.