Our bug is in ResourceObjects/OPFResource.cpp in GetUniqueID and is only hit when a preferred id already exists someplace (ie. splitting at a cursor when the original file name is no longer enough to be unique).
Checking if first digit is a number is quite easy and if so prepending a non-number will work just fine.
Code:
QString OPFResource::GetUniqueID(const QString &preferred_id, const OPFParser& p) const
{
if (p.m_idpos.contains(preferred_id)) {
return Utility::CreateUUID();
}
return preferred_id;
}