cinera.c: Fix buffer overflow copying "output"
This is a hotfix made just to allow using a max-length "output" value. Next commit should fix buffer overflows for all copies to implicitly null-terminated destinations.
This commit is contained in:
		
							parent
							
								
									ac4b155e73
								
							
						
					
					
						commit
						e8ed2f0143
					
				| 
						 | 
				
			
			@ -23,7 +23,7 @@ typedef struct
 | 
			
		|||
version CINERA_APP_VERSION = {
 | 
			
		||||
    .Major = 0,
 | 
			
		||||
    .Minor = 10,
 | 
			
		||||
    .Patch = 17
 | 
			
		||||
    .Patch = 18
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define __USE_XOPEN2K8 // NOTE(matt): O_NOFOLLOW
 | 
			
		||||
| 
						 | 
				
			
			@ -4249,6 +4249,25 @@ CopyStringNoFormat_(int LineNumber, char *Dest, int DestSize, string String)
 | 
			
		|||
    return String.Length;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define ClearCopyStringNoFormatOrTerminate(Dest, DestSize, String) ClearCopyStringNoFormatOrTerminate_(__LINE__, Dest, DestSize, String)
 | 
			
		||||
int
 | 
			
		||||
ClearCopyStringNoFormatOrTerminate_(int LineNumber, char *Dest, int DestSize, string String)
 | 
			
		||||
{
 | 
			
		||||
    if(String.Length > DestSize)
 | 
			
		||||
    {
 | 
			
		||||
        printf("ClearCopyStringNoFormatOrTerminate() call on line %d has been passed a buffer too small (%d bytes) to contain %ld-character string:\n"
 | 
			
		||||
                "%.*s\n", LineNumber, DestSize, String.Length, (int)String.Length, String.Base);
 | 
			
		||||
        __asm__("int3");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Clear(Dest, DestSize);
 | 
			
		||||
    for(int i = 0; i < String.Length; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        *Dest++ = String.Base[i];
 | 
			
		||||
    }
 | 
			
		||||
    return String.Length;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define ClearCopyStringNoFormat(Dest, DestSize, String) ClearCopyStringNoFormat_(__LINE__, Dest, DestSize, String)
 | 
			
		||||
int
 | 
			
		||||
ClearCopyStringNoFormat_(int LineNumber, char *Dest, int DestSize, string String)
 | 
			
		||||
| 
						 | 
				
			
			@ -11129,7 +11148,7 @@ HMMLToBuffers(buffers *CollationBuffers, template *BespokeTemplate, string BaseF
 | 
			
		|||
 | 
			
		||||
                if(Result == RC_SUCCESS)
 | 
			
		||||
                {
 | 
			
		||||
                    ClearCopyStringNoFormat(N->WorkingThis.OutputLocation, sizeof(N->WorkingThis.OutputLocation), OutputLocation);
 | 
			
		||||
                    ClearCopyStringNoFormatOrTerminate(N->WorkingThis.OutputLocation, sizeof(N->WorkingThis.OutputLocation), OutputLocation);
 | 
			
		||||
 | 
			
		||||
                    buffer URLPlayer = {};
 | 
			
		||||
                    ClaimBuffer(&URLPlayer, BID_URL_PLAYER, MAX_BASE_URL_LENGTH + SLASH + MAX_RELATIVE_PAGE_LOCATION_LENGTH + SLASH + sizeof(N->WorkingThis.OutputLocation));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue