Index: nls.c =================================================================== --- nls.c (版本 27642) +++ nls.c (工作副本) @@ -62,7 +62,9 @@ if (ResultSize != NULL) *ResultSize = Size * sizeof(WCHAR); - for (i = 0; i < Size; i++) + ASSERT( CustomCP->MultiByteTable != NULL ); + + for (i = 0; i < Size; i++) { *UnicodeString = CustomCP->MultiByteTable[(UCHAR)*CustomString]; UnicodeString++; @@ -97,6 +99,8 @@ Offset = ((USHORT)Source >> 8); DPRINT("Offset: %hx\n", Offset); + + ASSERT( NlsUnicodeLowercaseTable != NULL ); Offset = NlsUnicodeLowercaseTable[Offset]; DPRINT("Offset: %hx\n", Offset); @@ -238,6 +242,7 @@ if (NlsMbCodePageTag == FALSE) { + ASSERT(NlsAnsiToUnicodeTable!=NULL); /* single-byte code page */ if (MbSize > (UnicodeSize / sizeof(WCHAR))) Size = UnicodeSize / sizeof(WCHAR); @@ -258,7 +263,8 @@ UCHAR Char; USHORT LeadByteInfo; PCSTR MbEnd = MbString + MbSize; - + ASSERT(NlsAnsiToUnicodeTable!=NULL); + ASSERT(NlsLeadByteInfo!=NULL); for (i = 0; i < UnicodeSize / sizeof(WCHAR) && MbString < MbEnd; i++) { Char = *(PUCHAR)MbString++; @@ -354,6 +360,7 @@ if (NlsMbOemCodePageTag == FALSE) { + ASSERT(NlsOemToUnicodeTable!=NULL); /* single-byte code page */ if (OemSize > (UnicodeSize / sizeof(WCHAR))) Size = UnicodeSize / sizeof(WCHAR); @@ -374,12 +381,12 @@ { /* multi-byte code page */ /* FIXME */ - UCHAR Char; USHORT OemLeadByteInfo; PCHAR OemEnd = OemString + OemSize; - - for (i = 0; i < UnicodeSize / sizeof(WCHAR) && OemString < OemEnd; i++) + ASSERT(NlsOemToUnicodeTable!=NULL); + ASSERT(NlsOemLeadByteInfo!=NULL); + for (i = 0; i < UnicodeSize / sizeof(WCHAR) && OemString < OemEnd; i++) { Char = *(PUCHAR)OemString++; @@ -512,7 +519,7 @@ { *ResultSize = Size; } - + ASSERT(NlsUnicodeToAnsiTable!=NULL); for (i = 0; i < Size; i++) { *MbString++ = NlsUnicodeToAnsiTable[*UnicodeString++]; @@ -525,7 +532,7 @@ USHORT WideChar; USHORT MbChar; - + ASSERT(NlsDbcsUnicodeToAnsiTable!=NULL); for (i = MbSize, Size = UnicodeSize / sizeof(WCHAR); i && Size; i--, Size--) { WideChar = *UnicodeString++; @@ -581,7 +588,7 @@ { /* multi-byte code page */ /* FIXME */ - + ASSERT(NlsDbcsUnicodeToAnsiTable!=NULL); while (UnicodeLength--) { USHORT WideChar = *UnicodeString++; @@ -618,6 +625,7 @@ if (NlsMbOemCodePageTag == FALSE) { + ASSERT(NlsUnicodeToOemTable != NULL); /* single-byte code page */ if (UnicodeSize > (OemSize * sizeof(WCHAR))) Size = OemSize; @@ -641,6 +649,7 @@ USHORT WideChar; USHORT OemChar; + ASSERT(NlsDbcsUnicodeToOemTable!=NULL); for (i = OemSize, Size = UnicodeSize / sizeof(WCHAR); i && Size; i--, Size--) { @@ -689,10 +698,9 @@ if (Source < 'a') return Source; - if (Source <= 'z') return (Source - ('a' - 'A')); - + ASSERT(NlsUnicodeUpcaseTable!=NULL); Offset = ((USHORT)Source >> 8) & 0xFF; Offset = NlsUnicodeUpcaseTable[Offset]; @@ -733,6 +741,8 @@ if (ResultSize != NULL) *ResultSize = Size; + ASSERT(CustomCP->WideCharTable!=NULL); + for (i = 0; i < Size; i++) { UpcaseChar = RtlUpcaseUnicodeChar(*UnicodeString); @@ -777,6 +787,8 @@ if (ResultSize != NULL) *ResultSize = Size; + ASSERT(NlsUnicodeToAnsiTable!=NULL); + for (i = 0; i < Size; i++) { UpcaseChar = RtlUpcaseUnicodeChar(*UnicodeString); @@ -809,9 +821,10 @@ WCHAR UpcaseChar; ULONG Size = 0; ULONG i; - + if (NlsMbOemCodePageTag == FALSE) { + ASSERT(NlsUnicodeToOemTable != NULL); /* single-byte code page */ if (UnicodeSize > (OemSize * sizeof(WCHAR))) Size = OemSize; @@ -820,11 +833,10 @@ if (ResultSize != NULL) *ResultSize = Size; - for (i = 0; i < Size; i++) { UpcaseChar = RtlUpcaseUnicodeChar(*UnicodeString); - *OemString = NlsUnicodeToOemTable[UpcaseChar]; + *OemString = NlsUnicodeToOemTable[UpcaseChar]; OemString++; UnicodeString++; } @@ -836,6 +848,7 @@ USHORT WideChar; USHORT OemChar; + ASSERT(NlsDbcsUnicodeToOemTable!=NULL); for (i = OemSize, Size = UnicodeSize / sizeof(WCHAR); i && Size; i--, Size--) { @@ -902,6 +915,7 @@ if (NlsMbCodePageTag == FALSE) { /* single-byte code page */ + ASSERT(NlsAnsiToUnicodeTable!=NULL); /* ansi->unicode */ Unicode = NlsAnsiToUnicodeTable[(UCHAR)Source];