@@ -21,11 +21,15 @@ void elf_write_str(strbuf_t *elf_array, char *vals)
2121 * If necessary, use elf_write_byte() to append the null character
2222 * after calling elf_write_str().
2323 */
24+ if (!elf_array || !vals )
25+ return ;
2426 strbuf_puts (elf_array , vals );
2527}
2628
2729void elf_write_byte (strbuf_t * elf_array , int val )
2830{
31+ if (!elf_array )
32+ return ;
2933 strbuf_putc (elf_array , val );
3034}
3135
@@ -36,19 +40,29 @@ char e_extract_byte(int v, int b)
3640
3741void elf_write_int (strbuf_t * elf_array , int val )
3842{
43+ if (!elf_array )
44+ return ;
3945 for (int i = 0 ; i < 4 ; i ++ )
4046 strbuf_putc (elf_array , e_extract_byte (val , i ));
4147}
4248
4349void elf_write_blk (strbuf_t * elf_array , void * blk , int sz )
4450{
51+ if (!elf_array || !blk || sz <= 0 )
52+ return ;
4553 char * ptr = blk ;
4654 for (int i = 0 ; i < sz ; i ++ )
4755 strbuf_putc (elf_array , ptr [i ]);
4856}
4957
5058void elf_generate_header (void )
5159{
60+ /* Check for null pointers to prevent crashes */
61+ if (!elf_code || !elf_data || !elf_symtab || !elf_strtab || !elf_header ) {
62+ error ("ELF buffers not initialized" );
63+ return ;
64+ }
65+
5266 elf32_hdr_t hdr ;
5367 /*
5468 * The following table explains the meaning of each field in the
@@ -175,6 +189,12 @@ void elf_generate_header(void)
175189
176190void elf_generate_sections (void )
177191{
192+ /* Check for null pointers to prevent crashes */
193+ if (!elf_symtab || !elf_strtab || !elf_section ) {
194+ error ("ELF section buffers not initialized" );
195+ return ;
196+ }
197+
178198 /* symtab section */
179199 for (int b = 0 ; b < elf_symtab -> size ; b ++ )
180200 elf_write_byte (elf_section , elf_symtab -> elements [b ]);
@@ -312,6 +332,12 @@ void elf_generate_sections(void)
312332
313333void elf_align (void )
314334{
335+ /* Check for null pointers to prevent crashes */
336+ if (!elf_data || !elf_symtab || !elf_strtab ) {
337+ error ("ELF buffers not initialized for alignment" );
338+ return ;
339+ }
340+
315341 while (elf_data -> size & 3 )
316342 elf_write_byte (elf_data , 0 );
317343
@@ -324,6 +350,12 @@ void elf_align(void)
324350
325351void elf_add_symbol (char * symbol , int pc )
326352{
353+ /* Check for null pointers to prevent crashes */
354+ if (!symbol || !elf_symtab || !elf_strtab ) {
355+ error ("Invalid parameters for elf_add_symbol" );
356+ return ;
357+ }
358+
327359 elf_write_int (elf_symtab , elf_strtab -> size );
328360 elf_write_int (elf_symtab , pc );
329361 elf_write_int (elf_symtab , 0 );
@@ -344,6 +376,11 @@ void elf_generate(char *outfile)
344376 outfile = "a.out" ;
345377
346378 FILE * fp = fopen (outfile , "wb" );
379+ if (!fp ) {
380+ error ("Unable to open output file for writing" );
381+ return ;
382+ }
383+
347384 for (int i = 0 ; i < elf_header -> size ; i ++ )
348385 fputc (elf_header -> elements [i ], fp );
349386 for (int i = 0 ; i < elf_code -> size ; i ++ )
0 commit comments