diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index 5a6ff35b75b832fdd24f321fef23d8b6a6ce40df..d21a763e6291f3a77a1d1c1dbc9090e3e3df327d 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -1812,7 +1812,7 @@ INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len)
     /* special handling for neutral locale names */
     if (locale && strlenW(locale) == 2)
     {
-        switch (info)
+        switch (info & ~LOCALE_LOCALEINFOFLAGSMASK)
         {
         case LOCALE_SNAME:
             if (len && len < 3)
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 91a870362c3731583b3c3f4198428898a8dc9d14..791f015766d31cb5fb01df4efa3014da2fe75c2c 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -4499,6 +4499,10 @@ static void test_GetLocaleInfoEx(void)
         ok(ret == 1, "got %d\n", ret);
         ok(!bufferW[0], "got %s\n", wine_dbgstr_w(bufferW));
 
+        ret = pGetLocaleInfoEx(enW, LOCALE_SPARENT | LOCALE_NOUSEROVERRIDE, bufferW, sizeof(bufferW)/sizeof(WCHAR));
+        ok(ret == 1, "got %d\n", ret);
+        ok(!bufferW[0], "got %s\n", wine_dbgstr_w(bufferW));
+
         ret = pGetLocaleInfoEx(enW, LOCALE_SCOUNTRY, bufferW, sizeof(bufferW)/sizeof(WCHAR));
         ok(ret == lstrlenW(bufferW)+1, "got %d\n", ret);
         if ((PRIMARYLANGID(LANGIDFROMLCID(GetSystemDefaultLCID())) != LANG_ENGLISH) ||