@@ -151,20 +151,28 @@ internal static Task<int> IsPriMethod(ICustomStreamReader clientStreamReader, IB
151151 /// </returns>
152152 private static async Task < int > startsWith ( ICustomStreamReader clientStreamReader , IBufferPool bufferPool , string expectedStart , CancellationToken cancellationToken = default )
153153 {
154- int iRet = - 1 ;
155154 const int lengthToCheck = 10 ;
156155 byte [ ] buffer = null ;
157156 try
158157 {
159- buffer = bufferPool . GetBuffer ( Math . Max ( bufferPool . BufferSize , lengthToCheck ) ) ;
158+ if ( bufferPool . BufferSize < lengthToCheck )
159+ {
160+ throw new Exception ( $ "Buffer is too small. Minimum size is { lengthToCheck } bytes") ;
161+ }
160162
161- int peeked = await clientStreamReader . PeekBytesAsync ( buffer , 0 , 0 , lengthToCheck , cancellationToken ) ;
163+ buffer = bufferPool . GetBuffer ( bufferPool . BufferSize ) ;
162164
163- if ( peeked > 0 )
165+ bool isExpected = true ;
166+ int i = 0 ;
167+ while ( i < lengthToCheck )
164168 {
165- bool isExpected = true ;
169+ int peeked = await clientStreamReader . PeekBytesAsync ( buffer , i , i , lengthToCheck - i , cancellationToken ) ;
170+ if ( peeked == 0 )
171+ return - 1 ;
172+
173+ peeked += i ;
166174
167- for ( int i = 0 ; i < lengthToCheck ; i ++ )
175+ while ( i < peeked )
168176 {
169177 int b = buffer [ i ] ;
170178
@@ -173,23 +181,23 @@ private static async Task<int> startsWith(ICustomStreamReader clientStreamReader
173181 else
174182 {
175183 char ch = ( char ) b ;
176- if ( ! char . IsLetter ( ch ) )
184+ if ( ch < 'A' || ch > 'z' || ( ch > 'Z' && ch < 'a' ) ) // ASCII letter
177185 return - 1 ;
178186 else if ( i >= expectedStart . Length || ch != expectedStart [ i ] )
179- isExpected = false ;
187+ isExpected = false ;
180188 }
181- }
182189
183- // only letters
184- iRet = isExpected ? 1 : 0 ;
190+ i ++ ;
191+ }
185192 }
193+
194+ // only letters
195+ return 0 ;
186196 }
187197 finally
188198 {
189199 bufferPool . ReturnBuffer ( buffer ) ;
190- buffer = null ;
191200 }
192- return iRet ;
193201 }
194202 }
195203}
0 commit comments