diff --git a/src/rpc/xmlrpc_tinyxml2.cc b/src/rpc/xmlrpc_tinyxml2.cc
index cdcea478..a5b9fc32 100644
--- a/src/rpc/xmlrpc_tinyxml2.cc
+++ b/src/rpc/xmlrpc_tinyxml2.cc
@@ -130,7 +130,7 @@ xml_value_to_object(const tinyxml2::XMLNode* elem) {
} else if (boolean_text == "0") {
return torrent::Object((int64_t)0);
}
- throw xmlrpc_error(XMLRPC_INTERNAL_ERROR, "unknown boolean value: " + boolean_text);
+ throw xmlrpc_error(XMLRPC_TYPE_ERROR, "unknown boolean value: " + boolean_text);
} else if (value_element_type == "array") {
auto array = torrent::Object::create_list();
auto data_element = element_access(value_element->ToElement(), "data");
diff --git a/test/rpc/xmlrpc_test_data.txt b/test/rpc/xmlrpc_test_data.txt
index 78f83a92..12268c66 100644
--- a/test/rpc/xmlrpc_test_data.txt
+++ b/test/rpc/xmlrpc_test_data.txt
@@ -57,3 +57,7 @@ thodCall>test_a41xmlrpc_reflectstring value
faultCode-501faultStringunable to parse integer value
+
+# Invalid - non-boolean boolean
+xmlrpc_reflectstring value
+faultCode-501faultStringunknown boolean value: string value