CultureInfo对大名称(字符串)的“怪异”响应

时间:2019-01-29 13:27:46

标签: c# .net error-handling

我是一个pentester,在对API进行模糊测试时,我发现了一个“怪异”响应,该响应似乎源于默认的.Net类CultureInfo。现在,我不是.Net方面的专家,我甚至都不是开发人员,如果这是一个菜鸟问题,那么请抱歉。

CultureInfo使用具有诸如en-US或nl-NL的语言环境的名称,并且可以从系统返回特定于语言环境的信息。

当模糊此区域设置时(因此,nl-NL部分),对于大于152的区域设置,我得到了两个不同的响应。我仅模糊了最后一部分,即国家(地区)部分,因此对CultureInfo的请求如下所示:nl-AAAAAA(以及更多的AAAA。

一个响应是错误“不支持文化”,其中包含一些其他信息。我收到的大多数请求都超过152个A。

奇怪的是,对于某些值,我得到了一个“正常”的默认响应,它假定nl-ANYTHING表示您想要nl-NL的结果,并且没有错误生成。例如(A的数量): 190、198、255、266和1900 我看不出为什么这些数量的A不会产生错误而其他类型的A却没有产生直接联系。

现在,此错误最有可能(如果我查看源代码)源自GetCultureInfoHelper(),该错误在CultureInfo()类的GetCultureInfo()中调用。这将以lcid 0进行调用,并将使用name参数创建一个新的CultureInfo类。然后,名称参数将为nl-(A * 190)。通常,它会中断并返回null和错误,但是对于某些数量的A,它不会在那里中断并返回正确的值。

实际的问题是:为什么要这样做?为什么不总是出错,还是总是返回默认值?

更多信息: 所有这些都运行在运行x64 Amazon Linux(不确定是Amazon Linux还是Ubuntu / Debian)的Linux服务器上的.Net容器中(据我所知)。

最可能重要的.Net来源:

    public static CultureInfo GetCultureInfo(string name)
{
  if (name == null)
    throw new ArgumentNullException(nameof (name));
  CultureInfo cultureInfoHelper = CultureInfo.GetCultureInfoHelper(0, name, (string) null);
  if (cultureInfoHelper == null)
    throw new CultureNotFoundException(nameof (name), name, SR.Argument_CultureNotSupported);
  return cultureInfoHelper;
}

这部分是GetCultureInfoHelper方法的一部分,并且是唯一实际返回Null的部分(据我所知):

      CultureInfo cultureInfo2;
  try
  {
    switch (lcid)
    {
      case -1:
        cultureInfo2 = new CultureInfo(name, altName);
        break;
      case 0:
        cultureInfo2 = new CultureInfo(name, false);
        break;
      default:
        cultureInfo2 = new CultureInfo(lcid, false);
        break;
    }
  }
  catch (ArgumentException ex)
  {
    return (CultureInfo) null;
  }

编辑: 有关该类的更多信息: https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo?view=netframework-4.7.2

0 个答案:

没有答案