Porto sealed their progress to the last 16 of the Champions League despite failing to break down a determined Dynamo Kiev side during a dour 0-0 draw in the Ukrainian capital on Tuesday night.
The Portuguese side remain top of Group A despite dropping points for the first time in the group stage, whilst the home side must now win both of their remaining matches to have any chance of reaching the knockout stages.
Jackson Martinez went closest for the away team as his header was well saved by teenage goalkeeper Maksym Koval, while at the other end, Andriy Yarmolenko wasted Kiev's best opportunities.
Porto can secure top spot in the group if they beat Dinamo Zagreb in matchday five, though that will depend on Paris Saint-Germain's result against Kiev on the same night.
Both teams started slowly at the Olympic Stadium, and the closest either side came to scoring in the opening 20 minutes came when Marco Ruben's weak effort hit Eliaquim Mangala on the arm, though the defender didn't know much about the obstruction.
The visitors looked dangerous on the counterattack, but they were left frustrated on numerous occasions by some dogged defending from Oleh Blokhin's side.
Porto top scorer Martinez was the main threat for the visitors, and he almost opened the scoring when he met Rodriguez's searching cross from the left, but his low header was acrobatically turned round the post by Koval.
That chance was the catalyst for the match to open up somewhat, and Taye Taiwo tried his luck from distance for the home side, though his speculative volley drifted wide of the post. Danilo then tested Koval with a weak effort from distance but there was precious little talking points during an opening period where defences dominated.
Porto began the second half much better than they had the first, and Silvestre Varela thought he had broken the deadlock as he latched onto Rodriguez's perfectly-weighted through-ball, but his shot across goal rolled narrowly wide.
The Ukrainian side responded to this scare and Yarmolenko tested Helton with a powerful effort from the corner of the box, though the shot was straight at the goalkeeper.
With both sides looking for the opening goal, there were chances for both sides, and Rodriguez was the next to try his luck as he shot straight at Koval, after Lucho Gonzalez had worked hard to keep the ball in on the byline.
Vitor Pereira's side were almost handed a large slice of luck on the hour mark as Joao Moutinho's free kick took a big deflection off the wall and Koval was left as a spectator as the ball fell narrowly wide.
Kiev had their best chance of the night with 25 minutes remaining when Yarmolenko was put through by substitute Lukman Haruna but he shot weakly at Helton from just inside the area.
The home side introduced Ideye Brown with a quarter of the match remaining, and he posed a threat in the box as he headed over the top from Yarmolenko's cross.
Ukraine striker Yarmolenko was becoming a key figure in the match, and he was denied by Helton for the third time in the second period his flicked header from a Miguel Veloso free kick was straight at the goalkeeper.
Lucho almost secured all three points for Pereira's team in the closing stages but he dragged his shot wide when well placed in the Kiev area.
Kiev pressed for a winner that would have seen keep in touch with the top two sides in the group but they failed to test Helton in stoppage time.