The C++ XML-Security library version 1.2 has a bug in XSECDOMUtils.cpp that causes it to unescape already unescaped percent characters. The bug can be reproduced with any xml file that contains an URI with an escaped percent character (%25). File Version is: $Id: XSECDOMUtils.cpp,v 1.26 2005/02/03 13:53:54 milan Exp $ The error happens in line 684. There the starting index for the new percent search isn't incremented, thus causing it to find the just unescaped percent character. a simple changed from percentIndex = XMLString::indexOf(retPath, chPercent, percentIndex); to percentIndex = XMLString::indexOf(retPath, chPercent, ++percentIndex); fixes this problem.
Fix (as provided in original report) checked into SVN. Thanks!