Fixed to not call xmlReadMemory if data length is 0

This commit is contained in:
Takeshi Nakatani
2025-10-11 05:23:59 +00:00
committed by Andrew Gaul
parent 2cb869dfd2
commit a9b9631c5c
2 changed files with 16 additions and 1 deletions

View File

@ -3586,6 +3586,16 @@ static int list_bucket(const char* path, S3ObjList& head, const char* delimiter,
//
std::string encbody = get_encoded_cr_code(responseBody.c_str());
// [NOTE]
// If encbody is empty, xmlReadMemory will output the message
// ":1: parser error : Document is empty" to stderr.
// Make sure encbody is not empty beforehand.
//
if(encbody.empty()){
S3FS_PRN_ERR("The data length passed to xmlReadMemory is 0.");
return -EIO;
}
// xmlDocPtr
std::unique_ptr<xmlDoc, decltype(&xmlFreeDoc)> doc(xmlReadMemory(encbody.c_str(), static_cast<int>(encbody.size()), "", nullptr, 0), xmlFreeDoc);
if(nullptr == doc){

View File

@ -451,11 +451,16 @@ bool simple_parse_xml(const char* data, size_t len, const char* key, std::string
{
bool result = false;
if(!data || !key){
if(!data || !key || 0 == len){
return false;
}
value.clear();
// [NOTE]
// If data is not nullptr and len is 0, this function will output the message
// ":1: parser error : Document is empty" to stderr.
// Make sure len is not 0 beforehand.
//
std::unique_ptr<xmlDoc, decltype(&xmlFreeDoc)> doc(xmlReadMemory(data, static_cast<int>(len), "", nullptr, 0), xmlFreeDoc);
if(nullptr == doc){
return false;