This is not a bug in radare2.
The comment that you see in red is merely the imported function prototype. In both cases seen in the picture, the parameter to puts is pushed through eax whereas it is loaded from a memory location based on ebx. radare2 does not emulate the code [unless told], so it cannot display the actual string being pointed.
Here is a small angr script that can do so:
proj = angr.Project('...path...')
state = proj.factory.blank_state(addr=0x0804EA9E)
simulation = proj.factory.simgr(state)
ret = simulation.explore(find=0x0804EAA3)
Between the addresses 0x0804EA9E to 0x0804EAA3 I've got mov ecx, 0Ah so I get: <BV32 0xa> from the print.
I know ...