EncoderHelpers.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // <copyright>
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // </copyright>
  4. namespace System.ServiceModel.Channels
  5. {
  6. using System.ComponentModel;
  7. using System.Runtime;
  8. using System.Runtime.Serialization;
  9. using System.ServiceModel.Configuration;
  10. using System.Xml;
  11. internal static class EncoderHelpers
  12. {
  13. internal static XmlDictionaryReaderQuotas GetBufferedReadQuotas(XmlDictionaryReaderQuotas encoderQuotas)
  14. {
  15. XmlDictionaryReaderQuotas bufferedReadQuotas = new XmlDictionaryReaderQuotas();
  16. encoderQuotas.CopyTo(bufferedReadQuotas);
  17. // now we have the quotas from the encoder, we need to update the values with the new quotas from the default read quotas.
  18. if (IsDefaultQuota(bufferedReadQuotas, XmlDictionaryReaderQuotaTypes.MaxStringContentLength))
  19. {
  20. bufferedReadQuotas.MaxStringContentLength = EncoderDefaults.BufferedReadDefaultMaxStringContentLength;
  21. }
  22. if (IsDefaultQuota(bufferedReadQuotas, XmlDictionaryReaderQuotaTypes.MaxArrayLength))
  23. {
  24. bufferedReadQuotas.MaxArrayLength = EncoderDefaults.BufferedReadDefaultMaxArrayLength;
  25. }
  26. if (IsDefaultQuota(bufferedReadQuotas, XmlDictionaryReaderQuotaTypes.MaxBytesPerRead))
  27. {
  28. bufferedReadQuotas.MaxBytesPerRead = EncoderDefaults.BufferedReadDefaultMaxBytesPerRead;
  29. }
  30. if (IsDefaultQuota(bufferedReadQuotas, XmlDictionaryReaderQuotaTypes.MaxNameTableCharCount))
  31. {
  32. bufferedReadQuotas.MaxNameTableCharCount = EncoderDefaults.BufferedReadDefaultMaxNameTableCharCount;
  33. }
  34. if (IsDefaultQuota(bufferedReadQuotas, XmlDictionaryReaderQuotaTypes.MaxDepth))
  35. {
  36. bufferedReadQuotas.MaxDepth = EncoderDefaults.BufferedReadDefaultMaxDepth;
  37. }
  38. return bufferedReadQuotas;
  39. }
  40. private static bool IsDefaultQuota(XmlDictionaryReaderQuotas quotas, XmlDictionaryReaderQuotaTypes quotaType)
  41. {
  42. switch (quotaType)
  43. {
  44. case XmlDictionaryReaderQuotaTypes.MaxDepth:
  45. case XmlDictionaryReaderQuotaTypes.MaxStringContentLength:
  46. case XmlDictionaryReaderQuotaTypes.MaxArrayLength:
  47. case XmlDictionaryReaderQuotaTypes.MaxBytesPerRead:
  48. case XmlDictionaryReaderQuotaTypes.MaxNameTableCharCount:
  49. return (quotas.ModifiedQuotas & quotaType) == 0x00;
  50. }
  51. Fx.Assert("invalid quota type.");
  52. return false;
  53. }
  54. }
  55. }