@@ -194,6 +194,17 @@ namespace Slang
194
194
this ->encoding = determinedEncoding;
195
195
}
196
196
197
+ bool HasNullBytes (char * str, int len)
198
+ {
199
+ bool hasSeenNull = false ;
200
+ for (int i = 0 ; i < len - 1 ; i++)
201
+ if (str[i] == 0 )
202
+ hasSeenNull = true ;
203
+ else if (hasSeenNull)
204
+ return true ;
205
+ return false ;
206
+ }
207
+
197
208
Encoding * StreamReader::DetermineEncoding ()
198
209
{
199
210
if (buffer.Count () >= 3 && (unsigned char )(buffer[0 ]) == 0xEF && (unsigned char )(buffer[1 ]) == 0xBB && (unsigned char )(buffer[2 ]) == 0xBF )
@@ -213,26 +224,19 @@ namespace Slang
213
224
}
214
225
else
215
226
{
216
- #ifdef _WIN32
217
- int flag = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE | IS_TEXT_UNICODE_STATISTICS | IS_TEXT_UNICODE_ASCII16;
218
- int rs = IsTextUnicode (buffer.Buffer (), (int ) buffer.Count (), &flag);
219
- if (rs)
220
- {
221
- if (flag & (IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_STATISTICS))
222
- return Encoding::UTF16;
223
- else if (flag & (IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_STATISTICS))
224
- return Encoding::UTF16Reversed;
225
- else if (flag & IS_TEXT_UNICODE_ASCII16)
226
- return Encoding::UTF8;
227
- }
228
- #endif
227
+ // find null bytes
228
+ if (HasNullBytes (buffer.Buffer (), (int )buffer.Count ()))
229
+ {
230
+ return Encoding::UTF16;
231
+ }
229
232
return Encoding::UTF8;
230
233
}
231
234
}
232
235
233
236
void StreamReader::ReadBuffer ()
234
237
{
235
238
buffer.SetSize (4096 );
239
+ memset (buffer.Buffer (), 0 , buffer.Count () * sizeof (buffer[0 ]));
236
240
auto len = stream->Read (buffer.Buffer (), buffer.Count ());
237
241
buffer.SetSize ((int )len);
238
242
ptr = 0 ;
0 commit comments