i am trying to add words from a text file to a linked list. my code works fine , but if the text file is too big it shows the following error: stack smashing detected. Can anyone help me please here is my code
Code:
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 
#include <stdio.h>
FILE *f;


int wordc=-1;
struct list {
  char  *str;
  struct list *next;
 
};
struct list *root;
struct list *head;
struct list *curr=NULL;
int init_list(){
  root=(struct list *)malloc(sizeof(struct list));
   head=root;
  if(root==NULL ){
    printf("Init list failed\n");
    return(1);
  }
    root[0].next=NULL;
    return(0);
}
int  list_add(char string[],int wordc){
    struct list *curr=(struct list *)malloc(sizeof(struct list));
    char *str1;
      if(root==NULL ){
            printf("Add list failed\n");
            return(1);
      }
    str1= (char *)malloc(60*sizeof(char));
      strcpy(str1,string);
    curr->str=str1;
    if(wordc==0)
        head->next=curr;
    else
        root->next=curr;
    
    curr->next=NULL;
    root=curr;    
    
}
void print_list(){
    struct list *ptr;
    ptr=head;
    while(ptr!=NULL){
        printf("|%s|\n", ptr->str);
        ptr=ptr->next;
    }
    printf("\n");
}
int open_file(char fname[]){
     FILE *f;
     char ch;
     char buf[60];
     int i=0;
     f=fopen(fname,"r");
         if ( f== NULL ){ 
        printf("ERROR OPENING THE FILE\n");
         return(1);
       }   
    //word count
     do
      {
        if((ch=fgetc(f))==EOF)
            break;
        do{
            
            buf[i]=ch;
            i++;
        }while((ch=fgetc(f))!='\n');
        buf[i]='\0';
        wordc++;
        printf("1\n");
        list_add(buf,wordc++);        
        i=0;
        printf("2\n");
                         
    
  }while(1);
}
int main(int argc,char *argv[]){


 if(argc!=2){
    printf("wrong parameters\n");
    return(1);
 }
 init_list();
 open_file(argv[1]);
 print_list();


}