@@ -21,11 +21,15 @@ void elf_write_str(strbuf_t *elf_array, char *vals)
21
21
* If necessary, use elf_write_byte() to append the null character
22
22
* after calling elf_write_str().
23
23
*/
24
+ if (!elf_array || !vals )
25
+ return ;
24
26
strbuf_puts (elf_array , vals );
25
27
}
26
28
27
29
void elf_write_byte (strbuf_t * elf_array , int val )
28
30
{
31
+ if (!elf_array )
32
+ return ;
29
33
strbuf_putc (elf_array , val );
30
34
}
31
35
@@ -36,19 +40,29 @@ char e_extract_byte(int v, int b)
36
40
37
41
void elf_write_int (strbuf_t * elf_array , int val )
38
42
{
43
+ if (!elf_array )
44
+ return ;
39
45
for (int i = 0 ; i < 4 ; i ++ )
40
46
strbuf_putc (elf_array , e_extract_byte (val , i ));
41
47
}
42
48
43
49
void elf_write_blk (strbuf_t * elf_array , void * blk , int sz )
44
50
{
51
+ if (!elf_array || !blk || sz <= 0 )
52
+ return ;
45
53
char * ptr = blk ;
46
54
for (int i = 0 ; i < sz ; i ++ )
47
55
strbuf_putc (elf_array , ptr [i ]);
48
56
}
49
57
50
58
void elf_generate_header (void )
51
59
{
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
+
52
66
elf32_hdr_t hdr ;
53
67
/*
54
68
* The following table explains the meaning of each field in the
@@ -175,6 +189,12 @@ void elf_generate_header(void)
175
189
176
190
void elf_generate_sections (void )
177
191
{
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
+
178
198
/* symtab section */
179
199
for (int b = 0 ; b < elf_symtab -> size ; b ++ )
180
200
elf_write_byte (elf_section , elf_symtab -> elements [b ]);
@@ -312,6 +332,12 @@ void elf_generate_sections(void)
312
332
313
333
void elf_align (void )
314
334
{
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
+
315
341
while (elf_data -> size & 3 )
316
342
elf_write_byte (elf_data , 0 );
317
343
@@ -324,6 +350,12 @@ void elf_align(void)
324
350
325
351
void elf_add_symbol (char * symbol , int pc )
326
352
{
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
+
327
359
elf_write_int (elf_symtab , elf_strtab -> size );
328
360
elf_write_int (elf_symtab , pc );
329
361
elf_write_int (elf_symtab , 0 );
@@ -344,6 +376,11 @@ void elf_generate(char *outfile)
344
376
outfile = "a.out" ;
345
377
346
378
FILE * fp = fopen (outfile , "wb" );
379
+ if (!fp ) {
380
+ error ("Unable to open output file for writing" );
381
+ return ;
382
+ }
383
+
347
384
for (int i = 0 ; i < elf_header -> size ; i ++ )
348
385
fputc (elf_header -> elements [i ], fp );
349
386
for (int i = 0 ; i < elf_code -> size ; i ++ )
0 commit comments