We actually do use this assumption in other init functions... The dereferencing in init_string was removed a while ago, unless someone put it back when I wasn't looking.

If the pointer is non-null, it's actually quite likely that it is an invalid pointer, it's a really unsafe assumption to expect it to be valid, and it causes coding inconveniences. It's clearer to just release valid lists before calling init_node_list(). I don't think there's any place in the C library where we actually need to init an already valid string, though.