Also now it seems to me that even the current code is not valid as it implicitly assumes that the prefix length is 128 with this flag. As the spec says 'low-order 8 octets of the advertised prefix' then if one advertise 2001:DB8:1020:3040:5060:7080::/96, then low-order 8 octets of this *prefix* are 1020:3040:5060:7080 and not 5060:7080:0000:0000.
Right. The spec is imprecise here -- what is meant is the address advertised within the update TLV, after compression. So a router can advertise 2001:db8:1020:3040:5060:7080:dead:beef/96 which advertises 2001:db8:1020:3040:5060:7080::/96 and sets the router-id to 50:60:70:80:de:ad:be:ef.
It seems that when used outside of the scope of obvious application (full IPv6 address), this flag is not really well specified (and does not make much sense).
Agreed, compression is underspecified in quite a few ways. Mea culpa. -- Juliusz