Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/msxml3/saxreader.c | 14 +++++++++++++- dlls/msxml3/tests/saxreader.c | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index e8d5b271d7..05c774b9e0 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -100,6 +100,10 @@ static const WCHAR FeatureNamespacePrefixesW[] = { '/','n','a','m','e','s','p','a','c','e','-','p','r','e','f','i','x','e','s',0 };
+static const WCHAR ExhaustiveErrorsW[] = { + 'e','x','h','a','u','s','t','i','v','e','-','e','r','r','o','r','s',0 +}; + struct saxreader_feature_pair { saxreader_feature feature; @@ -107,6 +111,7 @@ struct saxreader_feature_pair };
static const struct saxreader_feature_pair saxreader_feature_map[] = { + { ExhaustiveErrors, ExhaustiveErrorsW }, { ExternalGeneralEntities, FeatureExternalGeneralEntitiesW }, { ExternalParameterEntities, FeatureExternalParameterEntitiesW }, { LexicalHandlerParEntities, FeatureLexicalHandlerParEntitiesW }, @@ -3216,7 +3221,13 @@ static HRESULT WINAPI isaxxmlreader_getFeature( TRACE("(%p)->(%s %p)\n", This, debugstr_w(feature_name), value);
feature = get_saxreader_feature(feature_name); - if (feature == Namespaces || feature == NamespacePrefixes) + + if (This->version < MSXML4 && feature == ExhaustiveErrors) + return E_INVALIDARG; + + if (feature == Namespaces || + feature == NamespacePrefixes || + feature == ExhaustiveErrors) return get_feature_value(This, feature, value);
FIXME("(%p)->(%s %p) stub\n", This, debugstr_w(feature_name), value); @@ -3238,6 +3249,7 @@ static HRESULT WINAPI isaxxmlreader_putFeature( /* accepted cases */ if ((feature == ExternalGeneralEntities && value == VARIANT_FALSE) || (feature == ExternalParameterEntities && value == VARIANT_FALSE) || + (feature == ExhaustiveErrors && value == VARIANT_FALSE) || feature == Namespaces || feature == NamespacePrefixes) { diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 9ebed62871..29492fa1d8 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2789,6 +2789,20 @@ static void test_saxreader_features(void) continue; }
+ value = VARIANT_TRUE; + hr = ISAXXMLReader_getFeature(reader, _bstr_("exhaustive-errors"), &value); + if (IsEqualGUID(entry->guid, &CLSID_SAXXMLReader40) || + IsEqualGUID(entry->guid, &CLSID_SAXXMLReader60)) + { + ok(hr == S_OK, "Failed to get feature value, hr %#x.\n", hr); + ok(value == VARIANT_FALSE, "Unexpected default feature value.\n"); + + hr = ISAXXMLReader_putFeature(reader, _bstr_("exhaustive-errors"), VARIANT_FALSE); + ok(hr == S_OK, "Failed to put feature value, hr %#x.\n", hr); + } + else + ok(hr == E_INVALIDARG, "Unexpected return value %#x.\n", hr); + name = feature_names; while (*name) {