practices example best c# .net clr stringbuilder reference-source

example - stringbuilder list c#



¿Qué significa----- en el contexto de StringBuilder.ToString()? (4)

Además de la gran respuesta de @Jeroen, esto es más que una simple consideración. Es para evitar que alguien cree intencionalmente una condición de carrera y cause un desbordamiento de búfer de esa manera. Más adelante en el código, se verifica la longitud de esa variable local. Si el código fuera a verificar la longitud de la variable accesible en su lugar, podría haber cambiado en un hilo diferente entre el tiempo que se verificó y wstrcpy fue llamado:

// Check that we will not overrun our boundaries. if ((uint)(chunkLength + chunkOffset) <= ret.Length && (uint)chunkLength <= (uint)sourceArray.Length) { /// /// imagine that another thread has changed the chunk.m_ChunkChars array here! /// we''re now in big trouble, our attempt to prevent a buffer overflow has been thawrted! /// oh wait, we''re ok, because we''re using a local variable that the other thread can''t access anyway. fixed (char* sourcePtr = sourceArray) string.wstrcpy(destinationPtr + chunkOffset, sourcePtr, chunkLength); } else { throw new ArgumentOutOfRangeException("chunkLength", Environment.GetResourceString("ArgumentOutOfRange_Index")); } } chunk = chunk.m_ChunkPrevious; } while (chunk != null);

Pregunta realmente interesante sin embargo.

La página Fuente de referencia para stringbuilder.cs tiene este comentario en el método ToString :

if (chunk.m_ChunkLength > 0) { // Copy these into local variables so that they // are stable even in the presence of ----s (hackers might do this) char[] sourceArray = chunk.m_ChunkChars; int chunkOffset = chunk.m_ChunkOffset; int chunkLength = chunk.m_ChunkLength;

¿Qué significa esto? ¿Hay algo que un usuario malintencionado pueda insertar en una cadena para formatearlo?


El código fuente de la Fuente de referencia publicada se desplaza a través de un filtro que elimina contenido objetable de la fuente. Las palabras de Verboten son una, los programadores de Microsoft usan lenguaje obsceno en sus comentarios. Así que son los nombres de los desarrolladores, Microsoft quiere ocultar su identidad. Tal palabra o nombre es sustituido por guiones.

En este caso, puede ver lo que solía haber allí desde CoreCLR, la versión de código abierto de .NET Framework. Es una palabra verboten:

// Copia esto en variables locales para que sean estables incluso en presencia de condiciones de carrera

El cual fue editado a mano desde el original que usted miró antes de ser enviado a Github, Microsoft tampoco quiere acusar a sus clientes de ser piratas informáticos, originalmente decía races , convirtiéndose así en ----s :)


En el repositorio CoreCLR tiene una cita más completa:

Copie estos en las variables locales para que sean estables incluso en presencia de condiciones de carrera

Github

Básicamente: es una consideración de subprocesamiento.


No piense que este es el caso: el código en cuestión copia las variables locales para evitar que sucedan cosas malas si la instancia del generador de cadenas está mutada en otro hilo.

Creo que ---- puede estar relacionado con una palabra grosera de cuatro letras ...